@adhdev/daemon-standalone 1.0.76-rc.4 → 1.0.76-rc.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.
- package/dist/index.js +4 -4
- package/package.json +2 -2
- package/public/assets/{DashboardMeshGraphDialog-BoHsr8ue.js → DashboardMeshGraphDialog-DX6lkI__.js} +1 -1
- package/public/assets/common-CtbYNW-n.js +1 -0
- package/public/assets/common-Diyetrxr.js +1 -0
- package/public/assets/common-PfaWB_e3.js +1 -0
- package/public/assets/common-wAqqVnE7.js +1 -0
- package/public/assets/index-BuGRmTOW.js +122 -0
- package/public/index.html +1 -1
- package/vendor/mcp-server/index.js +1 -1
- package/public/assets/common-B-bcABBd.js +0 -1
- package/public/assets/common-BRmyrjB5.js +0 -1
- package/public/assets/common-D___Aqd4.js +0 -1
- package/public/assets/common-V_b-iyjQ.js +0 -1
- package/public/assets/index-CI4uEMUa.js +0 -122
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e={runFailed:"No se pudo ejecutar {{label}}",updateFailed:"No se pudo actualizar {{label}}",loadOptionsFailed:"No se pudieron cargar las opciones de {{label}}"},a={unknown:"Desconocido",starting:"Iniciando",stopped:"Detenido",failed:"Falló",idle:"Inactivo",generating:"Trabajando",awaitingApproval:"Requiere aprobación"},o={label:"Idioma",select:"Seleccionar idioma"},n={copy:"Copiar",no:"No",yes:"Sí",diagnostics:"Diagnóstico",done:"Listo",edit:"Editar",copied:"Copiado",copyId:"Copiar ID",technicalDetails:"Detalles técnicos",saved:"Guardado",refresh:"Actualizar",moreInfo:"Más información",closeDialog:"Cerrar diálogo",noRecords:"No hay registros.",close:"Cerrar",back:"Atrás",cancel:"Cancelar",confirm:"Confirmar",confirmTitle:"¿Estás seguro?"},i={loadingShort:"Cargando…",loadingDashboard:"Cargando tu panel...",machinesConnectedCount:"{{connected}}/{{total}} máquinas conectadas",disconnected:"Desconectado",connected:"Conectado",connectedToDashboard:"Conectado al panel",networkOffline:"Red sin conexión",reconnecting:"Reconectando",sessionExpired:"La sesión ha expirado.",logInAgain:"Iniciar sesión de nuevo",connectionFailed:"Error de conexión — actualiza la página o vuelve a intentarlo en unos momentos.",reconnectNow:"Reconectar ahora"},s={details:"Detalles",label:{success:"Listo",warning:"Atención",info:"Actualización"},dismiss:"Descartar"},r={actionNeeded:"Se requiere acción",taskComplete:"Tarea completada",markRead:"Marcar como leído",markUnread:"Marcar como no leído",delete:"Eliminar"},t={browser:{error:"Se detuvo con un error",finished:"Terminado",approvalWithMessage:"Necesita aprobación: {{message}}",approval:"Necesita aprobación",questionWithMessage:"Pregunta: {{message}}",question:"Esperando tu respuesta"},taskCompleted:"La tarea del agente {{label}} se completó",taskCompletedWithDuration:"La tarea del agente {{label}} se completó ({{duration}})",approvalNeeded:"Se requiere aprobación de {{label}}",questionNeeded:"{{label}} tiene una pregunta pendiente",noProgress:"El agente {{label}} no muestra progreso",noProgressWithDuration:"El agente {{label}} no muestra progreso ({{minutes}} min)",noProgressTitle:"{{label}} — Sin progreso",noProgressBody:"El agente no ha mostrado progreso durante más de {{duration}}",viewRequest:"{{requester}} quiere ver tu sesión",viewRequestTitle:"Solicitud de visualización",viewRequestApproved:"Solicitud de visualización aprobada",viewRequestDeclined:"{{target}} rechazó tu solicitud de visualización",someoneRequester:"Un miembro del equipo",someoneTarget:"Miembro del equipo"},d={header:{moreActions:"Más acciones",title:"Panel",guide:"Guía del panel",guideOpen:"Abrir la guía del panel",guideShort:"Guía",openGitStatus:"Abrir estado de git",meshGraph:"Grafo de Mesh",stopCliProcess:"Detener proceso CLI",chatHistory:"Historial de chat",remoteControl:"Control remoto",generating:"generando",activityInbox:"Notificaciones"},hidden:{title:"Pestañas ocultas",dragHint:"Arrastra una pestaña aquí para ocultarla.",resetPanels:"Restablecer paneles",restoreAll:"Restaurar todo",hideCurrentTab:"Ocultar pestaña actual",empty:"No hay pestañas ocultas.",resetPanelsConfirm:"¿Devolver todos los paneles flotantes o emergentes a la cuadrícula principal del panel?"},inbox:{unread:"No leído",read:"Leído",empty:"No hay actividad pendiente."},metaChips:{queuePending:"{{count}} en espera",queueTooltip:"Cola: {{pending}} en espera, {{assigned}} asignadas, {{completed}} completadas, {{failed}} fallidas"},meshRole:{coordinator:"Coordinador",worker:"Trabajador",coordinatorFor:"Coordinador de {{mesh}}",workerFor:"Trabajador de {{mesh}}",coordinatorUnknownMesh:"Coordinador de mesh",workerUnknownMesh:"Trabajador de mesh",openMeshGraph:"Abrir el grafo de mesh"},assistant:{label:"Asistente",start:"Iniciar asistente",starting:"Iniciando…",startHint:"Inicia tu asistente personal: un chat que gestiona tus proyectos y coordinadores",startFailed:"No se pudo iniciar el asistente: {{error}}"},assistantLaunch:{chooseCli:"Elegir la CLI del asistente",startWith:"Inicia con {{cli}}",noToolLock:"sin bloqueo de herramientas",noToolLockHint:"Solo las instrucciones del asistente limitan las herramientas de esta CLI; conserva sus propias herramientas de shell y archivos",unavailable:"No disponible: {{reason}}",unsupported:"Esta CLI no puede ejecutar el asistente",model:"Modelo",thinking:"Razonamiento",defaultOption:"Predeterminado",start:"Iniciar asistente"},versionBanner:{restarting:"reiniciando",upgrading:"actualizando…",unknownVersion:"desconocida",updateAvailable:"Actualización disponible",required:"requerido",retry:"reintentar"},remoteDialog:{liveRemoteView:"Vista remota en vivo",remoteUnavailable:"Vista remota no disponible",remoteOnly:"Solo remoto",splitView:"Vista dividida",remoteFallback:"Remoto",history:"Historial"},guide:{title:"Guía del panel",subtitle:"Una guía rápida del flujo del panel, las pestañas flotantes y emergentes, además de los atajos agrupados que puedes ajustar.",close:"Cerrar la guía del panel",tabs:{overview:"Resumen",quickstart:"Inicio rápido",shortcuts:"Atajos"},overview:{whatLivesWhere:{title:"Qué hay en cada lugar",tabsLabel:"Pestañas:",tabsText:"sesiones activas de agentes de IDE y CLI.",hiddenLabel:"Pestañas ocultas:",hiddenText:"guarda sesiones que no quieres en la tira principal pero que aún deseas conservar.",inboxLabel:"Bandeja de actividad:",inboxText:"sesiones a la espera de aprobación o tareas finalizadas que aún no has revisado.",cliToggleLabel:"Alternar vista CLI:",cliToggleText:"cambia una sesión PTY entre representación de terminal y de chat sin reiniciarla."},usefulFlows:{title:"Flujos útiles",reviewLabel:"Revisar notificaciones:",reviewText:"abre la bandeja, salta a la sesión y luego usa los controles de conversación o aprobación directamente desde el panel activo.",clutterLabel:"Reducir el desorden:",clutterText:"oculta las sesiones menos importantes en lugar de cerrarlas y restáuralas desde las pestañas ocultas cuando las necesites.",splitLabel:"Dividir el trabajo:",splitText:"mantén un panel activo para la entrada y deja que los paneles secundarios permanezcan de solo lectura hasta que los enfoques.",detachedLabel:"Vistas separadas:",detachedText:"haz flotar una pestaña para trabajar rápido en paralelo, o ábrela en una ventana nueva cuando quieras un monitor separado.",dockingLabel:"Acoplamiento:",dockingText:"usa Acoplar para devolver una pestaña flotante a la cuadrícula, o mueve una pestaña emergente de vuelta al panel principal.",perTabLabel:"Atajos por pestaña:",perTabText:"haz clic derecho en una pestaña de Dockview para asignar un atajo directo a esa sesión específica.",approvalLabel:"Botones de aprobación:",approvalText:"usa {{keys}} para las primeras tres acciones de aprobación visibles de la sesión activa."}},quickstart:{desktop:{title:"Inicio rápido de escritorio",step1:"Empieza primero por el flujo de máquina o espacio de trabajo. Elige o guarda un espacio de trabajo antes de lanzar sesiones CLI.",step2:"Mantén la tira principal centrada en el trabajo activo y envía el excedente a las pestañas ocultas.",step3:"Usa la bandeja para las sesiones que requieren aprobación o completadas en lugar de revisar cada pestaña.",step4:"Divide solo cuando necesites lectura en paralelo; haz flotar o abre una pestaña en ventana aparte cuando quieras separarla sin perder el diseño principal."},mobile:{title:"Inicio rápido en móvil",step1:"Mantente en modo chat para revisar y responder; usa el modo espacio de trabajo principalmente para lanzar o reabrir sesiones.",step2:"Empieza desde la pantalla de máquina, elige un espacio de trabajo y luego lanza IDE o CLI desde allí.",step3:"Trata el móvil como la superficie de control más simple: sin flujo de división, menos mecánicas de pestañas, cambio de sesión más rápido."}},shortcuts:{sections:{all:"Todos",workspace:"Espacio de trabajo",panes:"Paneles",approvals:"Aprobaciones"},disableAll:"Desactivar todo",resetToDefaults:"Restablecer valores predeterminados",default:"Predeterminado:",listening:"Escuchando...",set:"Definir",disable:"Desactivar",off:"Desactivado",footer:"Usa atajos con modificadores como {{keys}}, o define tu propia combinación. Los atajos de acción del panel se ignoran mientras escribes en campos de texto.",resetConfirm:"¿Restablecer todos los atajos del panel a sus valores predeterminados?",setListening:"Escuchando"}},shortcutDefs:{openShortcutHelp:{label:"Abrir atajos",description:"Muestra el panel de atajos de teclado."},openNewSession:{label:"Nueva sesión",description:"Abre el lanzador de nueva sesión."},hideCurrentTab:{label:"Ocultar pestaña actual",description:"Oculta la pestaña activa actual en las pestañas ocultas."},toggleHiddenTabs:{label:"Alternar pestañas ocultas",description:"Abre o cierra el menú emergente de pestañas ocultas."},openHistoryForActiveTab:{label:"Abrir historial",description:"Abre el historial de la sesión activa."},openRemoteForActiveTab:{label:"Abrir remoto",description:"Abre el control remoto de la sesión activa cuando esté disponible."},floatActiveTab:{label:"Hacer flotar la pestaña activa",description:"Mueve la pestaña activa a un panel flotante."},popoutActiveTab:{label:"Abrir la pestaña activa en una ventana nueva",description:"Mueve la pestaña activa a una ventana emergente separada."},dockActiveTab:{label:"Acoplar la pestaña activa",description:"Acopla una pestaña flotante de vuelta a la cuadrícula, o mueve una pestaña emergente de vuelta a la ventana principal."},splitActiveTabRight:{label:"Mover la pestaña activa a un nuevo panel derecho",description:"Crea un panel a la derecha y mueve la pestaña activa a él."},splitActiveTabDown:{label:"Mover la pestaña activa a un nuevo panel inferior",description:"Crea un panel debajo y mueve la pestaña activa a él."},focusLeftPane:{label:"Enfocar el panel izquierdo",description:"Mueve el foco al panel de la izquierda."},focusRightPane:{label:"Enfocar el panel derecho",description:"Mueve el foco al panel de la derecha."},focusUpPane:{label:"Enfocar el panel superior",description:"Mueve el foco al panel de arriba."},focusDownPane:{label:"Enfocar el panel inferior",description:"Mueve el foco al panel de abajo."},moveActiveTabToLeftPane:{label:"Mover la pestaña activa a la izquierda",description:"Mueve la pestaña activa al panel de la izquierda."},moveActiveTabToRightPane:{label:"Mover la pestaña activa a la derecha",description:"Mueve la pestaña activa al panel de la derecha."},moveActiveTabToUpPane:{label:"Mover la pestaña activa hacia arriba",description:"Mueve la pestaña activa al panel de arriba."},moveActiveTabToDownPane:{label:"Mover la pestaña activa hacia abajo",description:"Mueve la pestaña activa al panel de abajo."},triggerPrimaryApprovalAction:{label:"Acción de aprobación 1",description:"Pulsa el primer botón de aprobación/acción de la sesión activa."},triggerSecondaryApprovalAction:{label:"Acción de aprobación 2",description:"Pulsa el segundo botón de aprobación/acción de la sesión activa."},triggerTertiaryApprovalAction:{label:"Acción de aprobación 3",description:"Pulsa el tercer botón de aprobación/acción de la sesión activa."},setActiveTabShortcut:{label:"Definir atajo de pestaña activa",description:"Empieza a grabar un atajo directo para la pestaña activa."},selectPreviousGroupTab:{label:"Pestaña anterior del grupo",description:"Ve a la pestaña anterior dentro del grupo Dockview activo."},selectNextGroupTab:{label:"Siguiente pestaña del grupo",description:"Ve a la siguiente pestaña dentro del grupo Dockview activo."},toggleCliView:{label:"Alternar vista CLI",description:"Alterna la sesión CLI activa entre la vista de chat y de terminal."}}},l={stopProcess:"Detener el proceso CLI",title:"¿Detener {{agent}}?",gracefulDescription:"«Detener» pide al proveedor que salga de forma limpia cuando es compatible. «Forzar detención» finaliza el runtime de inmediato.",forceOnlyDescription:"Este proveedor no admite la detención limpia. «Forzar detención» finalizará el runtime de inmediato.",stop:"Detener",forceStop:"Forzar detención"},c={processing:"PROCESANDO...",actionRequired:"ACCIÓN REQUERIDA",alwaysAllowWarning:"Concede este permiso de forma permanente — las próximas ejecuciones no volverán a preguntar",questionPending:"PREGUNTA PENDIENTE",answerQuestion:"Responder la pregunta"},u={loading:"Cargando…",launchModelChanged:"{{from}} → {{to}} (cambiado)",launchModelSource:{user:"elegido",remembered:"recordado",mesh_slot:"slot de malla",task_override:"anulación de tarea",provider_default:"por defecto"}},p={noMeshesShort:"No hay meshes en esta máquina",noProvidersShort:"No hay agentes disponibles",advancedOptions:"Opciones avanzadas",agent:"Agente",defaultResolvesTo:"El valor por defecto se resuelve a {{model}}",title:"Iniciar sesión",close:"Cerrar el diálogo de nueva sesión",detectedLocally:"Detectado localmente",availableToOpen:"Disponible para abrir",machine:"Máquina",selectMachine:"Seleccionar máquina {{name}}",workspace:"Espacio de trabajo",browse:"Explorar…",launchTargetType:"Tipo de destino de lanzamiento",modeWorkspace:"Espacio de trabajo",modeWorkspaceDesc:"Sesión normal",modeMesh:"Mesh",modeMeshDesc:"Sesión de coordinador",homeDirectory:"Directorio de inicio",customFolder:"Carpeta personalizada…",launchWithoutWorkspace:"Lanzar sin espacio de trabajo.",selectWorkspaceFolder:"Selecciona una carpeta de espacio de trabajo.",selectFolder:"Seleccionar carpeta",saving:"Guardando…",saveWorkspace:"Guardar espacio de trabajo",loadingMeshes:"Cargando meshes…",noMeshes:"No hay ningún Repo Mesh configurado en esta máquina. Primero crea o sincroniza un mesh y luego vuelve a abrir este selector.",mesh:"Mesh",repoMesh:"Repo Mesh",nodeCount_one:"{{count}} nodo",nodeCount_other:"{{count}} nodos",coordinatorWorkspace:"Espacio de trabajo del coordinador: {{path}}",noProviders:"No hay nada utilizable en la máquina seleccionada. Si un agente está instalado fuera de la ubicación predeterminada, define su ruta en Máquina → Proveedores.",startupArguments:"Argumentos de inicio",optionalFlags:"Opciones adicionales...",autoApproveMode:"Modo de aprobación automática",autoApproveModeDescription:"Elige cómo gestiona esta sesión las solicitudes de aprobación.",autoApproveLegacy:"Aprobación automática",autoApproveLegacyDescription:"Acepta automáticamente las solicitudes de aprobación compatibles en esta sesión.",autoApproveRisk:{safe:"Seguro",caution:"Precaución",dangerous:"Peligroso"},dangerousModeTitle:"Confirmar modo de aprobación automática peligroso",dangerousModeFallbackWarning:"Este modo puede omitir protecciones de aprobación o aislamiento. Úsalo solo en un espacio de trabajo de confianza.",dangerousModeRisk:"Riesgo",dangerousModeLaunchArgs:"Argumentos de inicio inyectados",dangerousModeConfirm:"Usar modo peligroso",modelAndThinking:"Modelo y razonamiento (opcional)",model:"Modelo",providerDefault:"(predeterminado del proveedor)",custom:"Personalizado…",typeModelName:"Escribe un nombre de modelo",backToModelList:"← Volver a la lista de modelos",thinkingLevel:"Nivel de razonamiento",selectWorkspaceTitle:"Seleccionar espacio de trabajo",start:"Iniciar",starting:"Iniciando…",startMeshCoordinator:"Iniciar coordinador de Mesh",startingCoordinator:"Iniciando coordinador…",startIde:"Iniciar IDE",startingIde:"Iniciando IDE…",startFresh:"Empezar de cero",startingFresh:"Empezando de cero…",resumeSavedHistory:"Reanudar historial guardado",resumingSavedHistory:"Reanudando historial guardado…",errorLoadMeshes:"No se pudieron cargar los meshes",errorLoadFolder:"No se pudo cargar la carpeta",errorLoadSavedSessions:"No se pudieron cargar las sesiones guardadas",errorSaveWorkspace:"No se pudo guardar el espacio de trabajo",workspaceSaved:"Espacio de trabajo guardado. Aparecerá en la lista cuando se actualice el estado de la máquina.",errorManualMcpSetup:"Se requiere una configuración manual de MCP antes de que este proveedor pueda actuar como coordinador del mesh.",errorStartMeshCoordinator:"No se pudo iniciar el coordinador del mesh",errorStartSession:"No se pudo iniciar la sesión",errorResumeSession:"No se pudo reanudar la sesión",errorWorkspaceContextRequired:"Elige un espacio de trabajo — un directorio, un espacio guardado/predeterminado o tu directorio de inicio — antes de lanzar.",defaultWorkspace:"Espacio de trabajo predeterminado"},m={undo:"Deshacer",hiddenToast:"Se ocultó {{title}}",moreActionsFor:"Más acciones para {{title}}",loading:"Cargando...",loadingSubtitle:"Obteniendo tus máquinas y sesiones.",machines:"Máquinas",chats:"Chats",networkOffline:"Red sin conexión",sessionExpired:"La sesión expiró",reconnecting:"Reconectando",waitingForNetwork:"Esperando la red…",pleaseLogInAgain:"Vuelve a iniciar sesión.",restoringConnection:"Restaurando la conexión con el servidor…",waitingForDaemon:"Esperando tu daemon",connectYourMachines:"Conecta tus máquinas",waitingForDaemonSubtitle:"Inicia el daemon de ADHDev para conectar.",connectYourMachinesSubtitle:"Instala ADHDev en una máquina e inicia sesión.",newCount:"{{count}} nuevos",chatCount_one:"{{count}} chat",chatCount_other:"{{count}} chats",idle:"Inactivo",unreadSuffix:" · {{count}} sin leer",noActiveChats:"No hay chats activos",needsAttention:"Necesita atención",taskComplete:"Tarea completada",workingNow:"Trabajando ahora",earlier:"Anteriores",connecting:"Conectando…",connectingSubtitle:"Esperando la conexión con el servidor antes de cargar las conversaciones.",noMachinesConnected:"No hay máquinas conectadas",noMachinesSubtitle:"Conecta una máquina desde la pestaña Máquinas.",noConversations:"Aún no hay conversaciones",allCaughtUp:"Todo al día.",hiddenTabs:"Pestañas ocultas",collapsedCount_one:"{{count}} conversación contraída",collapsedCount_other:"{{count}} conversaciones contraídas",generatingCount:"{{count}} generando",collapsedGeneratingSuffix:" · {{count}} generando",restoreAll:"Restaurar todo",hide:"Ocultar",reconnectingItem:"Reconectando…",connectingItem:"Conectando…",actionNeeded:"Se requiere acción",done:"Listo",openMeshGraphFor:"Abrir el grafo de mesh de {{title}}",openLiveMeshGraph:"Abrir el grafo de repo mesh en vivo",stopSessionTitle:"Detener la sesión (termina el agente)"},g={hint:{daemon:{followUp:"Requiere seguimiento",merged:"Fusionado",notMergeable:"Aún no se puede fusionar: hay cambios o conflictos",cleanup:"Fusionado: se puede limpiar el worktree",needsMerge:"Publicado: listo para fusionar",blockedReview:"Requiere revisión antes de fusionar"},anchorEmpty:"Ningún espacio de trabajo en la rama predeterminada",anchorWorkspaces:"{{count}} espacio(s) de trabajo en {{branch}}",anchorNeedsFollowUp:"{{count}} en {{branch}} requieren seguimiento",submoduleSynced:"{{path}} está sincronizado",submoduleChanged:"{{path}} tiene cambios locales",submoduleOutOfSync:"{{path}} no está sincronizado con su padre",gitAgeUnknown:"Antigüedad del estado de git desconocida",staleGit:"El estado de git tiene más de 5 min",missingSubmodule:"Submódulo sin informar: {{paths}}",noGitYet:"Aún no se recibe el estado de git",noGitYetOnline:"En línea: aún no llega el estado de git",waitingForGit:"Esperando el estado de git…",nodeError:"El nodo informó un error",upstreamUnverified:"Upstream aún sin verificar",noUpstream:"Publica {{branch}} para fijar su upstream",mergeConflicts:"Resuelve los conflictos de fusión",detachedHead:"HEAD separado: cambia a una rama",notGitRepo:"No es un repositorio git",noGitStatus:"Aún no hay estado de git"},sessionCleanup:{stopAndDeleteHint:"Detiene las sesiones correspondientes y luego borra sus chats.",stopAndDelete:"Detener y borrar sesiones",deleteStoppedHint:"Limpia los chats terminados o detenidos sin detener las sesiones en ejecución.",deleteStopped:"Solo borrar sesiones detenidas",stopHint:"Detiene los procesos de sesión en ejecución pero conserva sus chats.",stop:"Solo detener sesiones activas",preserveHint:"Conserva el historial de chats terminados y no toca las sesiones en ejecución.",preserve:"Conservar historial y sesiones activas"},nodeHealth:{failed:"Falló",completed:"Completado",assigned:"Asignado",pending:"Pendiente",enabled:"Activado",unknown:"Conectando…",wrongBranch:"Otra rama",degradedHint:"La conexión con esta máquina se cortó o agotó el tiempo; suele ser temporal. Espera un momento o vuelve a conectarla.",degraded:"Inaccesible",offline:"Sin conexión",dirty:"Cambios sin confirmar",online:"En línea"},activity:{noKeyEvents:"Sin eventos clave recientes",showKey:"Solo eventos clave",showAll:"Mostrar toda la actividad",nodeChanged:"Máquina unida o retirada",worktreeCreated:"Worktree creado",nodeJoined:"Nodo añadido",nodeRemoved:"Nodo eliminado",sessionStarted:"Agente iniciado",needsInput:"Requiere tu respuesta",taskFailed:"Tarea fallida",taskFinished:"Tarea terminada",taskStarted:"Tarea iniciada"},drift:{clean:"Limpio",conflicts:"conflictos",submoduleOutOfSync_other:"{{count}} submódulos desincronizados",submoduleOutOfSync_one:"{{count}} submódulo desincronizado",submoduleChanged_other:"{{count}} submódulos con cambios",submoduleChanged_one:"{{count}} submódulo con cambios",changed_other:"{{count}} cambios",changed_one:"{{count}} cambio",upstreamUnverified:"upstream sin verificar",noGit:"Sin información de git",probePending:"Comprobando git…"},graph:{slowLinkChip:"Enlace lento",observationUnreachableChip:"Inaccesible",observationStaleChip:"Desactualizado",remoteBadge:"remoto",activeSessionAria:"sesión activa",observationAsOf:"hace {{age}}",observationRefreshing:"hace {{age}} · actualizando",observationFetching:"obteniendo estado…",observationUnreachable:"inaccesible · último estado hace {{age}}",observationUnreachableNoState:"inaccesible · aún sin estado"},statusTab:{v2ScopeHint:"Eventos pendientes por ámbito",providerSkewHint:"Proveedores con versiones distintas en distintos nodos",providerSkew:"{{count}} proveedor con versión distinta",v2RatioHint:"Proporción de eventos pendientes del coordinador en el formato de mensaje actual",daemonBuildHint:"Compilación exacta del daemon (versión@commit) en este nodo",quotaFailedHint:"Esta máquina no pudo leer el uso de este proveedor",quotaOkNoWindowHint:"Lectura correcta: este proveedor no tiene un límite porcentual que mostrar",nodeCountHint:"Nodos del mesh (espacios/worktrees) en esta máquina: comparten una misma cuota del plan",nodeCount_other:"{{count}} nodos",nodeCount_one:"{{count}} nodo",daemonVersionHint:"Versión del daemon en esta máquina",blockedReasonHint:"Por qué este nodo no puede aceptar ahora una nueva tarea que modifique código",providerCapHint:"Tareas activas por proveedor en este nodo frente a su límite declarado",priorityHint:"Preferencia de asignación (más alto = preferido)",priority:"prioridad {{value}}",loadHint:"Tareas activas asignadas a este nodo",load:"carga {{count}}",readonlyCapHint:"Tareas de investigación de solo lectura activas frente a su límite (2× el de escritura)",readonlyCap:"solo lectura {{active}}/{{max}}",writeCapHint:"Tareas activas que modifican código frente al límite de paralelismo del mesh",writeCap:"escritura {{active}}/{{max}}"},manualSetup:{restartHint:"Inicia una nueva sesión de CLI después de editar la configuración.",configPath:"Ruta de configuración:",format:"Formato:",server:"Servidor:",titleFor:"Se requiere configurar MCP manualmente para {{provider}}",title:"Se requiere configurar MCP manualmente"},help:{toggleAria:"Ayuda de mesh",toggleTitle:"Ayuda sobre conceptos de mesh",regionAria:"Ayuda sobre conceptos de mesh",kicker:"Ayuda",title:"Conceptos de mesh de un vistazo",close:"Cerrar ayuda",sections:{node:{term:"Nodo",summary:"Un espacio de trabajo que participa en el mesh: un checkout de repositorio o un git worktree aislado.",details:["Nodo base vs. nodo clon de worktree: un clon aísla el trabajo en paralelo sin conflictos.","Muestra el estado de salud (en línea/desconectado) junto con el estado de git (rama · ahead/behind · dirty).","Varios nodos pueden compartir el mismo daemon."]},p2p:{term:"Conexión P2P",summary:"Cómo el coordinador seleccionado alcanza cada nodo remoto a través de WebRTC.",details:["direct: una ruta directa de host/STUN; la menor latencia.","relay: retransmitido por TURN; funciona a través de redes restrictivas pero es más lento.","disconnected / failed: en este momento no hay un enlace P2P en vivo desde el coordinador.","La conectividad P2P se muestra como fichas de transport y RTT en cada tarjeta de nodo (y en el panel de detalles del nodo), no como una arista del grafo."]},session:{term:"Sesión",summary:"Una sesión de CLI de agente que se ejecuta en un nodo.",details:["status = idle / generating / waiting_approval.","Distingue las sesiones de coordinador (que despachan y recopilan el trabajo) de las sesiones de worker delegadas (que realizan el trabajo)."]},task:{term:"Tarea",summary:"Una única unidad de trabajo gestionada por el modelo de extracción basado en cola.",details:["Estados: pending → assigned → completed / failed / cancelled.","Los nodos inactivos reclaman de la cola automáticamente; el despacho directo apunta a una sesión específica."]},mission:{term:"Misión",summary:"Un lote de varias tareas orientado a un único objetivo, y el registro duradero de ese esfuerzo.",details:["Estados: active / paused / completed / abandoned.","El progreso se deriva de los estados de sus tareas miembro."]},refinery:{term:"Refinery (refine)",summary:"El proceso de converger y fusionar de forma segura una rama de worktree en la base.",details:["Basado en configuración (.adhdev/refine.*): protegido por una comprobación previa de equivalencia de parches y una protección no-op.","ff-only por principio; sin force-push.","Si un commit de submodule no es alcanzable desde origin, debe publicarse → se clasifica como blocked_review."]},completion:{term:"Modelo de finalización",summary:"La finalización del trabajo delegado se persiste en la cola (pending-events).",details:["El coordinador se entera de la finalización mediante sondeo periódico o eventos.","Como se persiste en la cola, las señales de finalización nunca se pierden."]},convergence:{term:"Estados de convergencia de rama",summary:"Tras el trabajo en worktree, cada rama se clasifica en exactamente un estado final.",details:["merged_to_main: fusionada en la base.","pushed_feature_branch_needs_merge: enviada, a la espera de fusión.","blocked_review: retenida por problemas de revisión/alcanzabilidad.","cleanup_candidate: lista para limpiar.","not_mergeable: no se puede fusionar."]},blueprint:{term:"Plano",summary:"La vista de plan: trabajo en cola y sus dependencias entre tareas en un lienzo.",details:["Un solo eje: profundidad de dependencias, de izquierda a derecha. Las raíces van de más reciente a más antigua.","Cada tarjeta lleva su hora, así la posición no tiene que codificarla.","Las cadenas de dependencias terminadas se pliegan para dejar visible el trabajo en curso."]},routingPreview:{term:"Vista previa de enrutado",summary:"Un pronóstico de solo lectura de dónde caería una tarea hipotética.",details:["Se muestra por dificultad; una tarea fijada a un nodo tiene su propia vista fijada (📌).","Es una predicción, no el propietario — una tarjeta ya ejecutada muestra su nodo real debajo."]},worktree:{term:"Nodo de worktree",summary:"Un nodo respaldado por un git worktree en lugar del checkout principal.",details:["Etiquetado por su rama (⎇). Permite varias tareas en una máquina sin compartir rama.","Los worktrees huérfanos se reportan como candidatos a limpieza y nunca se borran solos."]}}},approvals:{title:"APROBACIONES PENDIENTES",empty:"Ninguna sesión está esperando una decisión de aprobación.",sessionFallback:"sesión {{id}}",approve:"Aprobar",reject:"Rechazar",waitingFor:"Esperando {{duration}}"},difficulty:{easy:"Fácil",medium:"Media",difficult:"Difícil",freeform:"Libre"},panel:{outOfSyncBadge:"Desincronizado",conflictBadge:"Conflicto",attachedChats:"Chats adjuntos",providerUnknown:"proveedor desconocido",statusCoordinator:"coordinador",statusWorker:"trabajador",upstreamUnverified:"sin verificar",needsFollowUp:"necesita seguimiento",refined:"refinado",tooltipLocalChanges:"Cambios locales",tooltipHasConflicts:"Tiene conflictos",tooltipOutOfSync:"Desincronizado",tooltipNeedsFollowUp:"Necesita seguimiento",tooltipUpstreamUnverified:"Upstream sin verificar",tooltipRefineCompleted:"refinamiento completado",tooltipRefinedBranch:"{{branch}} refinada",tooltipP2PRelayed:"Enlace P2P retransmitido a través de TURN (ruta más lenta)",tooltipPrefixStatus:"Estado:",tooltipPrefixBranch:"Rama:",tooltipPrefixNote:"Nota:",defaultBranch:"rama principal",submoduleSynced:"sincronizado",moreChats_one:"+{{count}} chat más",moreChats_other:"+{{count}} chats más",remote:"remoto",chats_one:"{{count}} chat",chats_other:"{{count}} chats",generatingCount:"{{count}} generando",coordinatorAttached:"coordinador conectado",coordinators:"{{count}} coordinadores",workers_one:"{{count}} trabajador",workers_other:"{{count}} trabajadores",sampledStatus:"estado muestreado"},legendEdge:{parentBranch:"rama principal",cloneLink:"clon de worktree",worktreeLink:"misma rama",submoduleLink:"submódulo",sessionLink:"sesión",orphanLink:"requiere seguimiento"},attention:{submoduleDrift:"deriva de submódulo",submoduleDirty:"submódulo con cambios",conflictsPresent:"conflictos presentes",dirtyWorkspace:"workspace con cambios",upstreamUnverified:"upstream sin verificar",pushBranch:"publicar rama",blockedReview:"revisión bloqueada",refineFailed:"refine fallido",working:"en curso",refining:"refinando…",needsMerge:"necesita fusión",refineWorktree:"refinar worktree",needsFollowUp:"requiere seguimiento",offline:"sin conexión",ahead:"{{count}} por delante",behind:"{{count}} por detrás",aheadBehind:"{{ahead}} por delante / {{behind}} por detrás"},summary:{anchor:"Ancla de la rama principal",parent:"padre {{label}}",localChanges:"cambios locales",sessions_one:"{{count}} sesión",sessions_other:"{{count}} sesiones",conflicts:"conflictos",clean:"Limpio y al día con upstream"},taskDag:{plan:{depsFailed_one:"{{count}} anterior(es) fallaron",depsFailed_other:"{{count}} anteriores fallaron"},time:{now:"ahora mismo",minutes_one:"hace {{count}} min",minutes_other:"hace {{count}} min",hours_one:"hace {{count}} h",hours_other:"hace {{count}} h",days_one:"hace {{count}} d",days_other:"hace {{count}} d"},empty:"Aún no hay tareas",waitsOn_one:"espera {{count}}",waitsOn_other:"espera {{count}}",missingDeps_one:"{{count}} dependencia desconocida",missingDeps_other:"{{count}} dependencias desconocidas",legend:{satisfied:"completada",waiting:"en espera",failed:"fallida"},predictedSlotPinned:"Fijado a un nodo destino — slot previsto en ese nodo"},obs:{fieldEdgeId:"ID del enlace",fieldHealthRaw:"Estado",fieldNodeId:"ID del nodo",machineSection:"Máquina",behindCount:"{{count}} por detrás",aheadCount:"{{count}} por delante",healUnavailableHint:"Solo se puede actualizar aquí una copia limpia que solo va por detrás de un upstream verificado.",healHint:"Avanza esta copia hasta su upstream. No tiene cambios locales, así que no se pierde nada.",healFailed:"No se pudo actualizar {{label}}: {{reason}}",healDone:"{{label}} está actualizado",directionTBShort:"↓",directionLRShort:"→",tabMap:"Mapa",closeDetailAria:"Cerrar panel de detalles",layoutDirectionAria:"Dirección del diseño del gráfico",viewAria:"Vista del mesh",tabOverview:"Resumen",tabTasks:"Tareas",panHint:"arrastra o desplázate para mover",headlineFollowUp_one:"{{count}} requiere atención",headlineFollowUp_other:"{{count}} requieren atención",headlineIncomplete:"Algunas máquinas no son visibles",headlineConverged:"Todo sincronizado",badgeBlocked_one:"{{count}} bloqueado",badgeBlocked_other:"{{count}} bloqueados",badgeBlockedTitle:"{{count}} con revisión bloqueada",badgeNotMergeable_one:"{{count}} no fusionable",badgeNotMergeable_other:"{{count}} no fusionables",badgeNeedMerge_one:"{{count}} necesita fusión",badgeNeedMerge_other:"{{count}} necesitan fusión",badgeCleanupTitle:"{{count}} refine/limpieza",badgeOffline:"{{count}} sin conexión",badgeIncompleteTitle:"{{count}} con instantánea de par incompleta",badgeNoGitTitle:"{{count}} sin instantánea de git",badgeNoSubmodTitle:"{{count}} sin visibilidad de submódulos",badgeStaleTitle:"{{count}} con instantánea de par obsoleta",badgeActiveQueue:"cola activa: {{count}}",badgeNodes_one:"{{count}} nodo",badgeNodes_other:"{{count}} nodos",badgeAttachedChats_one:"{{count}} chat conectado",badgeAttachedChats_other:"{{count}} chats conectados",legendDirty:"{{count}} con cambios",legendOrphan_one:"{{count}} huérfano",legendOrphan_other:"{{count}} huérfanos",legendRecentFailures_one:"{{count}} fallo reciente",legendRecentFailures_other:"{{count}} fallos recientes",legendAnchor:"Ancla = rama principal",legendPeerLink:"Enlace de par = worktree de la misma rama",legendSubmoduleLink:"Enlace de submódulo = checkout hijo",healthRefineFailed:"{{count}} refine fallido",convergenceMergedToMain:"Fusionado en main",convergenceNeedsMerge:"Necesita fusión",convergenceBlockedReview:"Bloqueado — necesita revisión",convergenceCleanup:"Listo para limpiar",convergenceNotMergeable:"No fusionable",followUpLabel:"Seguimiento — {{status}}",selectedEdge:"Arista seleccionada",activeSessions:"Sesiones activas",queueTasks:"Tareas en cola",keyWarning:"Advertencia de clave",noResultCode:"No se devolvió ningún código de resultado.",legend:"Leyenda",checking:"Actualizando…",heal:"Actualizar",loadingGraph:"Cargando grafo…",emptyGraph:"Todavía no hay un grafo de malla en vivo disponible para este coordinador.",fieldLocality:"Localidad",fieldWorkspace:"Espacio de trabajo",fieldHead:"HEAD",fieldUpstream:"Upstream",fieldSource:"Origen",fieldTransport:"Transporte",fieldMachineId:"ID de máquina",fieldDaemonId:"ID de daemon",fieldFrom:"Desde",fieldTo:"Hasta",fieldLabel:"Etiqueta",connecting:"conectando...",providerUnknown:"proveedor desconocido",directionLRTitle:"De izquierda a derecha",directionTBTitle:"De arriba abajo"},notes:{sectionHint:"Lecciones que el coordinador conserva entre sesiones: particularidades de proveedores, patrones a evitar y pasos de recuperación.",expired:"caducada",neverExpires:"nunca caduca",durable:"permanente",expiresIn:"caduca {{when}}",tab:"Notas",addTitle:"Anadir nota operativa",listTitle:"Notas operativas",textPlaceholder:"Registra una peculiaridad del proveedor, un patron a evitar o una leccion de recuperacion...",categoryLabel:"Categoria",categoryUncategorized:"Sin categoria",categoryProviderQuirk:"Peculiaridad del proveedor",categoryPatternToAvoid:"Patron a evitar",categoryRecoveryLesson:"Leccion de recuperacion",add:"Anadir",edit:"Editar",delete:"Eliminar",save:"Guardar",cancel:"Cancelar",refresh:"Actualizar",loading:"Cargando notas...",empty:"Aun no hay notas operativas registradas.",unavailable:"Las notas operativas no estan disponibles: no se puede acceder al coordinador por P2P.",loadFailed:"No se pudieron cargar las notas operativas.",saveFailed:"No se pudo guardar la nota operativa.",deleteFailed:"No se pudo eliminar la nota operativa.",editFailed:"No se pudo actualizar la nota operativa.",showMore:"Ver más",showLess:"Ver menos",pinned:"fijada"},dialog:{liveUpdatesOn:"Actualizaciones en vivo activas",liveUpdatesPaused:"Actualizaciones en vivo en pausa: se muestra el último estado cargado",refreshedAt:"Actualizado {{time}}",refreshFailedQuiet:"la actualización falló · mostrando lo último cargado",refreshTitle:"Actualizar el grafo de malla en vivo",loadingStatus:"Cargando el estado de la malla en vivo…",noGraph:"Todavía no hay un grafo de malla en vivo disponible para este coordinador. Toca el ? de arriba para saber qué hace un Repo Mesh.",errorNoMeshId:"Este coordinador no expone un ID de malla en vivo."},health:{statFailed:"Fallidas",statPending:"En espera"},blueprint:{schedPrediction:"Predicción",readonlyBadge:"solo lectura",schedObservedAt:"a las {{time}}",schedNoNodes:"No hay nodos enrutables.",schedQuotaButton:"Cuota",schedQuotaButtonTitle:"Cuota del plan por máquina de un vistazo",schedNoWinner:"sin slot elegible",schedNext:"Siguiente asignación",schedWaiting:"Listo",schedFull:"Sin capacidad",schedFloorExcluded:"Bajo dificultad",schedQuotaGated:"Cuota bloqueada",schedCapFree:"Libre",schedColSlot:"Slot",schedColScore:"Puntaje",schedColQuota:"Cuota",schedColParallel:"Paralelo",schedColStatus:"Estado",schedColMachine:"Máquina",schedNextTitle:"Si envías una tarea de esta dificultad ahora, este slot la toma",schedTargetWorktreeTitle:"La tarea se ejecutaría en este worktree",schedUnpinnedTitle:"Envío hipotético sin nodo fijado — las tareas fijadas a un nodo muestran su propia previsión en sus tarjetas",schedPointInTime:"Predicción puntual, no una asignación definitiva: la capacidad de los slots puede quedar obsoleta en cuanto se ocupa o libera uno",schedulingShort:"Scheduling",list:{barActive:"Activas {{count}}",barBlocked:"Bloqueadas {{count}}",barRecent:"Recientes {{count}}",barMissions_one:"{{count}} misión",barMissions_other:"{{count}} misiones",sectionRunning:"En ejecución",sectionBlocked:"Bloqueadas",sectionRecent:"Recientes",sectionHistory:"Historial",generating:"generando",approvalNeeded:"requiere aprobación",choiceNeeded:"requiere elección",planShow:"plan",planHide:"ocultar",planTitle:"Ver el plan de dependencias de esta tarea",noMission:"Sin misión",loadMore_one:"Mostrar {{count}} más",loadMore_other:"Mostrar {{count}} más",emptyActive:"Nada en ejecución",waitingOn:"esperando a:",waitingOnMore:"+{{count}} más",blockedByDeadDependency:"bloqueada por una dependencia fallida/cancelada:",chainGroup:"Cadena: {{title}}"},graph:{viewSwitchLabel:"Vista del plano",viewList:"Lista",viewGraph:"Grafo",activeOnly:"Solo activos",activeOnlyTitle:"Ocultar carriles donde todo ha terminado",hiddenLanes_one:"{{count}} carril terminado oculto",hiddenLanes_other:"{{count}} carriles terminados ocultos",emptyActive:"Nada en ejecución",showFinished:"Mostrar carriles terminados",layoutFailed:"Falló el diseño del grafo: {{error}}",laneAdhoc:"Tareas independientes",laneCollapse:"Contraer",laneExpand:"Expandir",foldCompleted:"Plegar completadas",unfoldCompleted:"Mostrar completadas",foldNode_one:"{{count}} completada",foldNode_other:"{{count}} completadas",countRunning_one:"{{count}} en ejecución",countRunning_other:"{{count}} en ejecución",countDead_one:"{{count}} atascada",countDead_other:"{{count}} atascadas",countWaiting_one:"{{count}} en espera",countWaiting_other:"{{count}} en espera",countFailed_one:"{{count}} fallida",countFailed_other:"{{count}} fallidas",countDone_one:"{{count}} hecha",countDone_other:"{{count}} hechas",timeRunning:"en ejecución {{age}}",timeFinished:"terminó {{time}}",timeQueued:"en cola {{age}}",tooltipTask:"Tarea: {{id}}",tooltipMission:"Misión: {{id}}",tooltipStatus:"Estado: {{status}}",deadDirect:"Una dependencia falló o se canceló — esta tarea no empezará por sí sola.",deadTransitive:"Algo aguas arriba falló o se canceló — esta tarea no empezará por sí sola.",legendDepends:"depende de",legendRunning:"en ejecución",legendDead:"nunca podrá empezar",heldUntil:"hasta {{time}}",tone:{pending:"pendiente",running:"en ejecución",completed:"completada",failed:"fallida",cancelled:"cancelada",dead:"atascada",plan:"planificada",held:"retenida"}}},page:{title:"Repo Mesh",subtitle:"Orquestación multiespacio de trabajo",waitingForDaemon:"Esperando la conexión del daemon..."},list:{nodeCount_other:"{{count}} nodos",nodeCount_one:"{{count}} nodo",machinesOnline:"{{online}}/{{total}} máquinas en línea",settings:"Ajustes",open:"Abrir",title:"Tus Repo Mesh",count_one:"{{count}} malla",count_other:"{{count}} mallas",createMesh:"+ Crear malla",createTitle:"Crear Repo Mesh",createOnMachine:"Crear en la máquina",noConnectedDaemon:"Ningún daemon conectado",workspace:"Espacio de trabajo",workspaceHint:"Elige entre los espacios de trabajo registrados por el daemon seleccionado.",name:"Nombre",remoteUrl:"URL remota del repositorio (recomendado)",remoteUrlHint:"Pega la URL de tu repositorio — la identidad (github.com/user/repo) se completa automáticamente.",repoIdentity:"Identidad del repositorio",repoIdentityHint:"Para un repositorio sin remoto, o cuando la URL difiere por máquina. p. ej. github.com/user/repo",advancedIdentityToggle:"Avanzado: definir la identidad manualmente",create:"Crear",creating:"Creando…",cancel:"Cancelar",loading:"Cargando mallas...",emptyTitle:"No hay Repo Mesh",emptyWithDaemons:"Ejecuta varios agentes de código sobre un repositorio en tus máquinas.",emptyNoDaemons:"Conecta primero una máquina.",createFirst:"Crear la primera malla",noRepoIdentity:"Sin identidad de repositorio"},detail:{useFromCli:"Usar desde la CLI",distributionInOrderSummary:"El primer nodo disponible, en orden de alta",distributionSmartSummary:"El nodo más adecuado para cada tarea, repartido por carga",tabGeneral:"General",back:"← Atrás",delete:"Eliminar",observabilityOpenTitle:"Abrir la vista en vivo (resumen, tareas, mapa)",observabilityDisabledTitle:"Primero debe estar conectada la máquina host",observabilityOpen:"Abrir",tabsAriaLabel:"Secciones de configuración del mesh",tabAdvanced:"Avanzado",quotaBusyFallback:"Alternativa de cuota cuando está ocupado",quotaBusyFallbackHint:"Cuando el mejor proveedor por cuota no tiene ranuras libres, prueba el siguiente proveedor con cuota en el mismo nodo en lugar de esperar. Nunca recurre a un proveedor con poca cuota ni mueve la tarea a otro nodo.",distribution:"Distribución",distributionSmart:"Inteligente",distributionSmartDescription:"Asigna cada tarea al nodo cuya ranura encaja mejor (dificultad + etiquetas), y luego reparte por prioridad y carga. Sin ranuras también reparte el trabajo de forma equilibrada. Recomendado si algún nodo tiene ranuras.",distributionInOrder:"En orden",distributionInOrderDescription:"Asigna a los nodos en el orden en que se añadieron — el primer nodo elegible se hace cargo del trabajo. Sin reparto de carga.",recommended:"Recomendado",saving:"Guardando…",visibilityTitle:"Visibilidad del panel",visibilityLabel:"Sesiones de trabajo generadas por el coordinador",visibilityHint:"Ocultas = mantén la bandeja de entrada en silencio y silencia sus notificaciones; interactúas a través de la sesión del coordinador. Visibles = muestra cada sesión de trabajo generada como su propia conversación.",visibilityHidden:"Oculto",visibilityVisible:"Visible",coordinatorPromptTitle:"Prompt del coordinador",thisMeshHint:"Se aplica solo a las sesiones del coordinador de {{name}}. Déjalo vacío para mantener el valor predeterminado del daemon.",overrideLabel:"Anulación (reemplaza el valor predeterminado)",overrideHint:"Cuando se establece, reemplaza el prompt base predeterminado del daemon. Déjalo vacío para mantener el valor predeterminado.",overridePlaceholder:"(vacío — se aplica el valor predeterminado del daemon)",appendLabel:"Añadir (se agrega después de la base)",appendHint:"Siempre se agrega después del prompt base que prevalezca.",appendPlaceholder:"(vacío — no se añade nada)",availablePlaceholders:"Marcadores de posición disponibles",placeholdersIntro:"Estos tokens se reemplazan al renderizar un prompt de anulación o adición:",saveCoordinatorPrompt:"Guardar prompt del coordinador",clear:"Borrar",clearTitle:"Borra ambos campos. Haz clic en Guardar para confirmar.",safetyTitle:"Seguridad y Git",safetyDescription:"Controles de aprobación y comportamiento de seguridad de git para las tareas dirigidas por el coordinador. Los cambios sin confirmar siguen una regla fija: un nodo base con cambios nunca recibe tareas de escritura; un worktree con cambios solo recibe continuaciones de su propia rama; Refinery no fusiona un worktree de rama con cambios sin confirmar.",policyDefaultBadge:"Predeterminado",policyResetToDefault:"Restablecer valor predeterminado",pushApproval:"Aprobación de push",requireApprovalBeforePush:"Requerir aprobación antes del push",doNotRequireApproval:"No requerir aprobación",destructiveGitApproval:"Aprobación de git destructivo",requireApproval:"Requerir aprobación",autoPublishSubmodule:"Publicar automáticamente los commits de submódulos (avanzado)",requireExplicitApproval:"Requerir aprobación explícita",allowRefineryPublish:"Permitir publicación no forzada de Refinery",autoFastForward:"Auto fast-forward de nodos inactivos",ffEnabled:"Habilitado (pone al día los nodos en línea, limpios y rezagados)",ffDisabled:"Deshabilitado",includeRemoteNodes:"Incluir nodos remotos",includeRemoteNodesHint:"Desactivado = solo se hace auto fast-forward del espacio de trabajo local del coordinador.",remoteNo:"No (solo espacio de trabajo local)",remoteYes:"Sí (delegar a los daemons remotos propietarios)",detectionMode:"Modo de detección",detectionModeHint:"Inactivo = en el borde de inactividad de un nodo. Continuo = también escanea periódicamente (solo nodos base).",idleEdgeOnly:"Solo en el borde de inactividad",continuousScan:"Continuo (escaneo periódico)",sessionCleanupLabel:"Al eliminar un nodo, sus sesiones…",sessionCleanupHint:"Separa la limpieza de transcripciones de la limpieza de runtime/procesos.",mcpDescription:"· El servidor MCP del mesh se puede usar directamente desde tu agente CLI.",repoMeshJsonTitle:"Del archivo del repositorio (solo lectura)",repoMeshJsonHint:"Este repositorio incluye texto del prompt del coordinador que se suma a los campos de arriba. Edítalo en el archivo del repositorio, no aquí:",repoMeshJsonOverrideLabel:"Override del repositorio",repoMeshJsonAppendLabel:"Append del repositorio",repoMeshJsonInvalid:"No se pudo analizar el .adhdev/mesh.json de este repositorio, por lo que su capa de prompt se ignora."},nodeList:{advanced:"Avanzado",launchBlockedChip:"Sin proveedor detectado",usesTools:"Usa {{tools}}",addingIsExplicit:"Añadirlo sigue siendo decisión tuya.",compatibleWorkspace:"Se detectó un espacio de trabajo Git compatible.",inspectingRepo:"Revisando el repositorio Git (solo lectura)…",title:"Nodos y proveedores ({{count}})",descriptionCloud:"Espacios de trabajo de este mesh y sus herramientas de IA preferidas.",descriptionStandalone:"Espacios de trabajo que participan en este mesh y sus herramientas de IA preferidas.",daemonCandidates:"Candidatos de daemon de máquina",available:"{{count}} disponible(s)",noDaemonsAvailable:"Actualmente no hay daemons de máquina conectados disponibles.",allDaemonsAttached:"Todos los daemons de máquina conectados ya están adjuntos.",selectedHost:"host seleccionado",attachMachine:"Adjuntar máquina",addNode:"Agregar nodo",attachMachineTitle:"Adjuntar daemon de máquina",addNodeTitle:"Agregar nodo",machine:"Máquina",selectMachine:"Selecciona una máquina...",workspacePath:"Ruta del espacio de trabajo",enterCustomPath:"O introduce una ruta personalizada →",preferredTools:"Herramientas de IA preferidas (en orden)",preferredToolsHint:"Orden utilizado al iniciar sin un proveedor explícito.",add:"Agregar",cancel:"Cancelar",emptyTitle:"Sin nodos",emptyDescription:"Agrega un espacio de trabajo a este mesh.",slotsLabel:"Herramientas de IA preferidas (ranuras de capacidad)",slotsHint:"Cada ranura = proveedor + modelo + thinking + la dificultad/capacidad de tarea que gestiona + un límite de paralelismo por ranura. Las tareas se emparejan con la ranura más adecuada (orden = preferencia). Sin ranuras, este nodo usa su orden de proveedores heredado.",nodeInstruction:"Instrucción del nodo (opcional)",nodeInstructionHint:"Se muestra en el prompt del sistema del coordinador como 📌 Instrucción del nodo.",nodeInstructionPlaceholder:"p. ej. «Ejecuta solo pruebas de humo aquí», «Usa opus en este nodo»",saveInstruction:"Guardar instrucción",saving:"Guardando…",removeNode:"Eliminar nodo",nodeId:"ID del nodo:",repoRoot:"Raíz del repositorio:",activeSessionsLabel:"Sesiones activas:",added:"Agregado:",activeQueueAssignments:"Asignaciones de cola activas",noActiveAssignment:"No hay tarea de cola asignada activa para este nodo.",activeSessions:"Sesiones activas",launchBlocked:"No se detectó ningún proveedor en este nodo — el inicio de tareas está bloqueado hasta que se seleccione o instale un proveedor. (Las ranuras de capacidad vacías por sí solas no bloquean el inicio; esto significa que no se encontró ningún proveedor.)",titleNoCount:"Nodos y proveedores",workspacesDetected:"{{count}} espacio(s) de trabajo detectado(s)",pickFromSaved:"← Elige de los espacios de trabajo guardados",ownerMachine:"Propietario: {{owner}} · Máquina: {{machine}}",machineTabsLabel:"Máquinas en este mesh",machineTabCounts:"{{nodes}} nodo(s) · {{slots}} ranura(s)"},host:{setHostConfirmTitle:"¿Definir {{name}} como host?",setupNode:"nodo de configuración",willHostOn:"Se alojará en",title:"Máquina host",descriptionSet:"La máquina que ejecuta el coordinador de este mesh. Se define una vez y no se cambia aquí.",descriptionUnset:"Elige la máquina que ejecutará el coordinador de este mesh.",hostLabel:"Host:",hostNode:"Nodo host:",unknown:"Desconocido",hostOffline:"Host sin conexión",hostOfflineText:"El estado en vivo no se cargará hasta que el host se reconecte. Mientras tanto puedes enviar comandos a través de otra máquina conectada; esto no cambia el host.",reconnectToCommand:"Reconectar para comandar",reconnectToCommandHint:"Enruta los comandos a través de este daemon conectado hasta que el host regrese. No cambia el host del mesh.",waitForHost:"Esperar a que el host se reconecte",noDaemonsToRoute:"No hay daemons conectados disponibles para enrutar los comandos. Pon en línea el host (u otro daemon).",setHostBanner:"Elige una máquina host",hostDaemon:"Daemon host",hostDaemonHint:"Elige el daemon que alojará este mesh y confirma con «Establecer como host».",resolvingHost:"Resolviendo el host… (o elige un daemon para alojar)",noDaemonsToHost:"No hay daemons conectados. Pon un daemon en línea para alojar esta malla.",online:"en línea",offline:"sin conexión",noCommandTarget:"No hay ningún destino de comando disponible — pon en línea el host o un daemon.",setHostAction:"Establecer como host",settingHost:"Estableciendo host…",setHostActionHint:"Fija este daemon como host del mesh. Es efectivamente permanente — no se reasigna aquí después.",confirmSetsHost:"Confírmalo abajo para establecerlo como host del mesh.",attachNodeThenSetHost:"Adjunta primero uno de sus workspaces como nodo y luego establécelo como host."},slotEditor:{emptyHint:"Sin ranuras, este nodo sigue ejecutando tareas según su orden de proveedores. Añade una ranura para enviar dificultades o capacidades concretas a una herramienta.",empty:"Sin ranuras (opcional)",moveUp:"Subir",moveDown:"Bajar",removeSlot:"Quitar ranura",provider:"Proveedor",select:"(seleccionar)",model:"Modelo",providerDefault:"(predeterminado del proveedor)",custom:"Personalizado…",modelPlaceholder:"modelo",backToModelList:"← Volver a la lista de modelos",thinking:"Razonamiento",thinkingDefault:"(predeterminado)",difficulty:"Dificultad (en blanco = todas)",capabilityTags:"Etiquetas de capacidad (separadas por comas)",maxParallel:"Máximo en paralelo (por ranura)",maxParallelPlaceholder:"sin límite",addSlot:"Añadir ranura",saving:"Guardando…",saveSlots:"Guardar ranuras"},tagEditor:{emptyHint:"Las tareas pueden ejecutarse aquí sin coincidir con ninguna etiqueta. Añade etiquetas para dirigir tareas a este nodo.",noSpaces:"Las etiquetas no pueden contener espacios.",reservedPrefix:"Ese prefijo se deriva automáticamente — elige otra etiqueta.",alreadyAdded:"Ya añadida.",routingTags:"Etiquetas de enrutamiento",autoDerivedTitle:"Derivada automáticamente — no se puede editar",customTagTitle:"Etiqueta personalizada",remove:"Quitar {{tag}}",addPlaceholder:"añade una etiqueta personalizada (p. ej. test-runner)",add:"Añadir",saving:"Guardando…",saveTags:"Guardar etiquetas",empty:"Sin etiquetas (opcional)"},queue:{title:"Cola",description:"Inspecciona el trabajo de la cola activa por separado de los registros históricos de tareas completadas, fallidas y canceladas."},promptPreview:{connectPrompt:"Conecta un daemon para previsualizar el valor predeterminado.",errorRender:"Error al renderizar el prompt predeterminado",hide:"Ocultar el prompt predeterminado",view:"Ver el prompt predeterminado",rendering:"Renderizando…",retry:"Reintentar",info:"Esto es lo que recibe una sesión de coordinador cuando Override está vacío.",launchScopeNote:"La misión, la actividad reciente y las notas operativas se añaden al iniciar y no se muestran aquí."},providerAutoApprove:{partialInventoryChip_other:"{{count}} nodos pendientes",partialInventoryChip_one:"{{count}} nodo pendiente",title:"Valores predeterminados de aprobación automática por proveedor",loading:"Cargando los valores predeterminados…",loadError:"No se pudieron cargar los valores predeterminados de aprobación automática.",noProviders:"No se detectaron proveedores CLI con modos de aprobación automática en las máquinas de este mesh.",awaitingNodes:"Esperando a que {{count}} nodo(s) informen de sus proveedores instalados…",partialInventory:"La lista de proveedores puede estar incompleta: {{count}} nodo(s) aún no han informado.",noHostDaemon:"Conecta el daemon anfitrión del mesh para configurar los valores de aprobación automática.",repoSection:{chip:"Compartido con el equipo",title:"Valor predeterminado del repositorio",hint:"Se guarda en .adhdev/mesh.json y se comparte con todo el equipo. Define qué modo solicita un trabajador delegado; no concede permiso para ejecutarlo.",usesProviderDefault:"Usa el valor del proveedor",clear:"Usar el valor del proveedor"},machineSection:{chip:"Solo esta máquina",title:"Autorización de esta máquina",hint:"Solo local (meshes.json), nunca se guarda en el repositorio. Controla si los trabajadores de ESTA máquina aprueban automáticamente y si se permiten los modos peligrosos.",autoApproveToggleLabel:"Aprobación automática de workers delegados",autoApproveToggleHint:"Si está desactivada, los workers delegados en esta máquina se detienen en cada solicitud de aprobación.",dangerousToggleLabel:"Permitir modos dangerous en esta máquina",dangerousToggleHint:"Opt-in: los workers de esta máquina pueden ejecutarse en modos dangerous que ejecutan herramientas sin ninguna aprobación.",dangerousDisabledHint:"Sin efecto mientras la aprobación automática de arriba esté desactivada.",confirmTitle:"Opt-in a modos dangerous",confirmDescription:"Esto permite que los workers delegados en esta máquina se ejecuten en modos dangerous del proveedor. En un modo dangerous, el agente ejecuta herramientas y comandos sin ninguna solicitud de aprobación.",confirmScopeLabel:"Ámbito",confirmScopeValue:"Solo esta máquina (meshes.json local — nunca se confirma en el repo)",confirmEffectLabel:"Efecto",confirmEffectValue:"Los modos peligrosos pedidos por el repositorio (p. ej. Force, totalmente autónomo) ya no se rebajan a un modo interactivo más seguro en esta máquina.",confirmConfirm:"Opt-in"},effectiveSection:{statusDowngradedHint:"Se pidió {{requested}}, pero esta máquina no permite modos peligrosos, así que ejecuta {{mode}}.",statusRequested:"Ejecuta: {{mode}}",statusInvalidFallback:"No se encontró el modo solicitado → se usa el del proveedor: {{mode}}",statusDowngraded:"{{mode}} (rebajado)",statusDisabled:"Aprobación automática desactivada en esta máquina: el trabajador pedirá aprobación.",statusNone:"No hay un modo de aprobación automática utilizable: el trabajador pedirá aprobación."},dangerous:{sharedWarningDetail:"Se guarda en .adhdev/mesh.json. Cada máquina lo ejecuta solo tras activarlo (delegatedWorkerDangerousModeAllow).",sharedWarningTitle:"Esto se guarda en el repositorio",sharedWarning:"Se guarda en el repositorio y se comparte con tu equipo. Las máquinas que no permiten modos peligrosos usan un modo más seguro."},saving:"Guardando…",saved:"Guardado en .adhdev/mesh.json",saveError:"No se pudieron guardar los valores predeterminados."},status:{healthErrorChip:"Error",offlineMachinesTitle:"Sin reportar: {{machines}}",badgeBootstrap:"Preparando",badgeUpdatePending:"Actualización pendiente",quotaClaudeRefreshChip:"Requiere actualizar",quotaClaudeSetupChip:"Configurar",machineNotReportingHint:"No hemos recibido noticias de esta máquina, así que su cuota es desconocida.",quotaNotCollectedHint:"Una máquina informa su cuota tras la primera actualización (unos 15 minutos) y solo mientras un agente ha estado activo.",schedulingNotReportedHint:"Esta máquina ejecuta una versión anterior que no informa la planificación.",schedulingNotReported:"Actualiza el daemon para ver la planificación",schedulingTitle:"Planificación",distributionTitle:"La distribución decide cómo se reparte el trabajo sin destino entre los nodos. La carga y los límites por nodo aparecen abajo.",protocolTitle:"Versiones de protocolo y proveedores",noNodesReporting:"Todavía no hay nodos que reporten el runtime.",quotaNotCollected:"Aún sin cuota",quotaFreshnessHint:"Última actualización",machineNotReporting:"Sin conexión · cuota desconocida",quotaClaudeSetupHint:"Configura la cuota de Claude con `adhdev quota claude:install`.",quotaClaudeRefreshHint:"Abre una sesión de Claude Code una vez para actualizar la cuota.",quotaAccountHint:"La cuenta con la sesión iniciada a la que pertenece esta cuota, según reporta la CLI del proveedor",quotaOkNoWindows:"Sin límite",healthNotGitRepo:"No es un repositorio git",healthProbePending:"Comprobando…",healthPeerConnection:"Conexión {{state}}",healthNoLiveReport:"Aún sin informe",badgeWorktree:"worktree",badgeWorktreeTitle:"Nodo worktree local",badgeWorktreeBranchTitle:"Rama worktree {{branch}}",badgeBootstrapTitle:"Bootstrap del worktree en curso",badgeConnectionTitle:"Estado de conexión del par",badgeSessions_one:"{{count}} sesión",badgeSessions_other:"{{count}} sesiones",badgeFastForwardReady:"fast-forward listo",badgeFastForwardReadyTitle:"Limpio y por detrás del upstream — fast-forward seguro",badgeStaleBuildTitle:"El daemon en vivo se compiló antes del HEAD del workspace",badgeDeployLagTitle:"El build del daemon difiere de origin/main — pendiente de deploy + reinicio",machinesNotReporting_one:"{{count}} sin conexión",machinesNotReporting_other:"{{count}} sin conexión",machinesSection:"Máquinas — plan · nodos",versionSkewTitle:"Versión distinta del consenso de la máquina",machineVersionsTitle:"Versiones de CLI instaladas en esta máquina — compartidas por sus nodos"},overview:{tasksCount_other:"{{count}} tareas",tasksCount_one:"{{count}} tarea",sessionCount_other:"{{count}} sesiones",sessionCount_one:"{{count}} sesión",providerUnknown:"proveedor desconocido",truncated:"(recortado)",missionCard:"Misiones",ledgerCard:"Actividad",queueCard:"Cola",nodesCard:"Nodos",sessionsCard:"Sesiones activas",refineCard:"Trabajos de Refine",recentActivity:"Actividad reciente",recentTasks:"Tareas recientes",missionTasksHeading:"Tareas de la misión",showFewer:"Mostrar menos",showMore:"+{{count}} más",noActiveMissions:"No hay misiones activas",missionDataUnavailable:"Actualiza el daemon para ver las misiones",completedHistory:"Historial de completadas / abandonadas",noQueueActivity:"No hay actividad en la cola.",noNodes:"Todavía no hay nodos en este mesh.",noActiveSessions:"No hay sesiones activas.",noRefineJobs:"No hay trabajos de Refine.",closeDetail:"Cerrar detalle",loadingGoal:"Cargando…",showFullGoal:"Mostrar objetivo completo",statCompleted:"Completadas",statAssigned:"Asignadas",statPending:"Pendientes",statFailed:"Fallidas",statBlocked:"Bloqueadas",statCancelled:"Canceladas",statWallClock:"Tiempo real",statTotalRuntime:"Tiempo total de ejecución",statRetries:"Reintentos",statDispatched:"Despachadas",statStalled:"Estancadas",statSessions:"Sesiones",statCheckpoints:"Puntos de control",statActive:"Activas",statPaused:"Pausadas",statAbandoned:"Abandonadas",recentFailures:"{{count}} fallos recientes",activeCount:"{{count}} activas",failedCount:"{{count}} fallidas",detailKickerMission:"Misión",detailKickerLedger:"Entrada del registro",detailKickerQueue:"Tarea en cola",detailKickerSession:"Sesión",detailLabelMissionId:"ID de misión",detailLabelCreated:"Creada",detailLabelUpdated:"Actualizada",detailLabelElapsed:"Duración",detailLabelFullInstruction:"Ver instrucción completa",detailLabelLastActivity:"Última actividad de tarea",detailLabelIncompleteEvidence:"Evidencia incompleta",detailLabelEntryId:"ID de entrada",detailLabelWhen:"Cuándo",detailLabelNode:"Nodo",detailLabelDependsOn:"Depende de",detailLabelSession:"Sesión",detailLabelProvider:"Proveedor",detailLabelPayload:"Mostrar payload sin procesar",detailLabelTaskId:"ID de tarea",detailLabelFinalSummary:"Resumen final",detailLabelFullFinalSummary:"Ver informe completo",detailFinalSummaryLoading:"Cargando el resumen final…",detailFinalSummaryUnavailable:"Resumen final no disponible",detailLabelAutoLaunch:"Inicio automático",detailLabelCancelReason:"Motivo de cancelación",detailLabelRequeueReason:"Motivo de reencolado",detailLabelRequeued:"reencolada {{count}}",detailLabelSessionId:"ID de sesión",detailLabelBranch:"Rama",detailLabelRole:"Rol",detailLabelStarted:"Iniciada",detailLabelWorkspace:"Espacio de trabajo",routingHeading:"Enrutamiento",routingDevice:"Dispositivo",routingDaemon:"Daemon",routingExecution:"Ejecución",routingVia:"Vía",routingDifficulty:"Dificultad",routingFitness:"Idoneidad",routingReason:"Motivo",routingRequiredTags:"Etiquetas requeridas",routingTagsUnsatisfied:"no satisfechas",routingSkipped:"Candidatos omitidos",routingSkippedMore:"+{{count}} más",pausedMissions:"Misiones en pausa",ledgerAllTime:"totales históricos",sessionTasksHeading:"Tareas de esta sesión",showOnCanvas:"Ver en el lienzo"}},v={showMoreChars:"Mostrar más ({{count}} caracteres)",collapse:"Contraer",you:"Tú",toolMessageAria:"Mensaje de herramienta",activityMessageAria:"Mensaje de actividad",activityFallback:"Actividad",copyMessage:"Copiar mensaje",copyCode:"Copiar código",showMore:"Mostrar más",showLess:"Mostrar menos",thought:"Pensamiento",toolExpand:"Ver salida completa",toolCollapse:"Mostrar menos",toolExpandLoading:"Cargando…",toolExpandUnavailable:"No se pudo obtener la salida completa de este paso.",toolExpandStale:"La salida completa cambió de lugar — la transcripción cambió desde que se leyó. Recarga la conversación para obtenerla.",waitingToSend:"Esperando para enviar — el agente todavía está trabajando.",waitingToSendAria:"Esperando para enviar",notDelivered:"No entregado — el agente nunca recibió este mensaje.",notDeliveredAria:"No entregado",sendNow:"Enviar ahora",sending:"Enviando…",sendNowAria:"Enviar ahora a la cola del agente, sin interrumpir su turno actual",sendNowTitle:"Envía este mensaje al agente ahora. Entra en la propia cola del agente y se responde a continuación; el turno en curso sigue ejecutándose.",cancelQueued:"Cancelar",cancelQueuedAria:"Cancelar este mensaje en cola",cancelQueuedTitle:"Quita este mensaje de la cola. No se enviará al agente.",agent:"Agente",tool:"Herramienta",ranCommand:"Comando ejecutado",activityTerminal:"Terminal",activityRuntime:"Entorno de ejecución",system:"Sistema",injected:"Entrada inyectada",relayLabel:"Relevo · {{project}} · {{outcome}}",relayOutcome:{completed:"completado",failed:"fallido",cancelled:"cancelado"},relayIdle:"Sin trabajo en curso",reviewLabel:"Revisión de memoria",daemonNoticeLabel:"Aviso"},b={debugBundleFailed:"No se pudo recopilar la información de depuración",connectingToMachine:"Conectando con tu máquina",establishingP2P:"Estableciendo conexión P2P",agentNotMonitored:"Agente no monitorizado",clickToSwitchMonitoring:"Haz clic para cambiar la monitorización a este agente",agentPanelHidden:"El panel del agente aún no está visible",openPanelHint:"Abre el chat en tu IDE",noMessagesYet:"Aún no hay mensajes",loadingChat:"Cargando chat...",openPanel:"Abrir panel de {{label}}",switchingPanel:"Cambiando...",openingPanel:"Abriendo...",busyNoProgress:"El agente no muestra progreso.",busyGenerating:"El agente está generando una respuesta.",busyWaitingApproval:"Esperando aprobación",activityToggleLabel:"Pasos de herramientas",activityToggleTitle:"Mostrar pasos de herramientas, terminal y razonamiento",reconnectMachine:"Reconectar",reconnectingMachine:"Reconectando…",reconnectMachineTitle:"La reconexión automática se detuvo para esta máquina: reconecta ahora"},h={addMessageOptional:"Añade un mensaje (opcional)…",showControls:"Mostrar controles",hideControls:"Ocultar controles",sendTo:"Enviar un mensaje a {{panel}}",attachImage:"Adjuntar imagen",placeholder:"Enviar mensaje a {{panel}}...",sendMessage:"Enviar mensaje",dropImage:"Suelta la imagen aquí"},f={cdpDisconnectedShort:"IDE desconectado",hideFromDashboard:"Ocultar del panel",removeShortcut:"Quitar atajo",changeShortcut:"Cambiar atajo ({{shortcut}})",dropSplitRight:"Dividir a la derecha",dropMoveHere:"Mover aquí",dropSplitLeft:"Dividir a la izquierda",relaunchWithCdp:"Reiniciar con conexión",cdpDisconnected:"Sin conexión con el IDE: el historial del chat y las capturas no están disponibles.",resizeHandleHint:"Arrastra para cambiar el tamaño · Doble clic para unir",shortcutListening:"Escuchando…",shortcutPressCombo:"Pulsa una combinación de teclas (p. ej. {{example1}}, {{example2}})",shortcutSetTitle:"Definir atajo",loadingSessions:"Cargando sesiones...",noConversations:"Aún no hay conversaciones",waitingForDaemon:"Esperando a tu daemon",connectYourMachines:"Conecta tus máquinas",daemonDescription:"Inicia el daemon de ADHDev para conectar.",installDescription:"Instala ADHDev en una máquina e inicia sesión.",newSession:"Nueva sesión",newSessionDescription:"Inicia una sesión con cualquier agente instalado.",noTabsInGroup:"No hay pestañas en este grupo",pressEscToCancel:"Pulsa Esc para cancelar",noActiveAgent:"Ningún agente activo",moveTabHere:"Mueve una pestaña aquí para verla"},C={growViewport:"Ampliar la vista del terminal",shrinkViewport:"Reducir la vista del terminal",sendInterrupt:"Enviar interrupción (Ctrl-C)",arrowRight:"Flecha derecha",arrowDown:"Flecha abajo",arrowLeft:"Flecha izquierda",arrowUp:"Flecha arriba",keysPanelTitle:"Teclas del terminal",keysButton:"Teclas",copyHint:"Copia el texto seleccionado del terminal o, si no hay selección, la pantalla visible",specDebugHint:"Depuración de spec: estado actual, secciones e historial de transiciones",replayScrollbackHint:"Carga la salida anterior del terminal para poder desplazarte más arriba",loadOlderOutput:"Cargar salida anterior del terminal",loadingOlder:"Cargando anteriores...",debug:"Depurar",copy:"Copiar",openControlKeys:"Abrir teclas de control del terminal",closeControlKeys:"Cerrar teclas de control del terminal"},y={muteThis:"Silenciar este chat",unmuteThis:"Reactivar el sonido de este chat"},A={switchToTerminal:"Cambiar a la vista de Terminal",switchToChat:"Cambiar a la vista de Chat"},q={updatedAt:"Actualizado {{time}}",messageCountShort_other:"{{count}} mensajes",messageCountShort_one:"{{count}} mensaje",workspaceUnknown:"Espacio de trabajo desconocido",clearSelection:"Quitar",selectedSavedHistory:"Historial guardado seleccionado",loadingShort:"Cargando…",savedHistoryNoneYet:"No hay historial guardado",savedHistoryLoadedCount_other:"Se cargaron {{count}} historiales guardados. Abre el historial guardado para elegir uno.",savedHistoryLoadedCount_one:"Se cargó {{count}} historial guardado. Abre el historial guardado para elegirlo.",savedHistoryBadge:"Historial guardado",resumeSavedHistory:"Reanudar el historial guardado",startFresh:"Empezar de cero",resumingSavedHistory:"Reanudando el historial guardado…",startingFresh:"Empezando de cero…",startIde:"Iniciar IDE",startingIde:"Iniciando IDE…",recoverHostedRuntime:"Recuperar el entorno de ejecución alojado",hostedRuntimeRecoveryDescription:"Recuperación alternativa para entornos de ejecución alojados tras interrupciones. Para una continuidad normal, abre el historial guardado en su lugar.",openSavedHistory:"Abrir el historial guardado",savedHistoryTitle:"Historial guardado",savedHistoryHelper:"Usa el historial guardado cuando quieras dar continuidad a la conversación con el mismo proveedor.",savedHistoryEmpty:"Aún no se ha encontrado ningún historial guardado.",refreshSavedHistory:"Actualizar el historial guardado",refreshingSavedHistory:"Actualizando el historial guardado…",startFreshWith:"¿Empezar de cero con {{label}}?",restart:"¿Reiniciar {{label}}?",startFreshReview:"Revisa el proveedor y la carpeta de destino antes de empezar de cero.",restartIdeReview:"Revisa o cambia el espacio de trabajo de destino antes de reiniciar este IDE.",restartStoppedReview:"Revisa o cambia el espacio de trabajo de destino antes de reiniciar esta sesión detenida.",confirmStartFresh:"Empezar de cero",confirmRestart:"Reiniciar",confirmStartingFresh:"Empezando de cero…",confirmRestarting:"Reiniciando…",resumeWith:"¿Reanudar el historial guardado con {{label}}?",resumeReview:"Revisa o cambia el espacio de trabajo de destino antes de reanudar el historial guardado."},S={layout:{expandSidebar:"Expandir barra lateral",collapseSidebar:"Contraer barra lateral",collapse:"Contraer"},auth:{loading:"Cargando el panel independiente…",loadError:"No se pudo cargar el estado de autenticación independiente: {{error}}",signInTitle:"Inicio de sesión independiente",passwordProtected:"Este panel autoalojado está protegido por una contraseña local.",tokenProtected:"Este servidor independiente está protegido por un token. Ábrelo con la URL con token o establece una contraseña desde una sesión ya autenticada.",passwordPlaceholder:"Introduce la contraseña independiente",unlock:"Desbloquear panel",signingIn:"Iniciando sesión…",noPasswordEnabled:"El inicio de sesión con contraseña no está habilitado en este servidor."},machine:{loading:"Cargando la máquina...",awaitingInput:"Esperando tu entrada ↑"},settings:{restartToApply:"Reinicia para aplicar",providersLink:"Proveedores",providersIntro:"IDE y agentes de esta máquina:",title:"Configuración",subtitle:"Configuración del daemon local, apariencia y preferencias en el dispositivo",publicHostWarning:"Este servidor independiente está actualmente vinculado a 0.0.0.0 sin autenticación. Cualquier persona en tu LAN puede abrir el panel hasta que establezcas una contraseña o un token.",daemonSection:"Daemon",versionLabel:"Versión",statusLabel:"Estado",statusRunning:"● En ejecución",statusNotConnected:"○ No conectado",authLabel:"Autenticación",authPassword:"Contraseña habilitada",authToken:"Token habilitado",authNone:"Sin autenticación configurada",networkSection:"Acceso a la red",networkHint:"Usa solo localhost si este panel debe permanecer en la máquina actual. Usa todas las interfaces si sueles acceder a él desde teléfonos, tabletas u otros dispositivos de tu LAN. Si expones esa máquina de forma más amplia, establece una contraseña o un token.",localhostLabel:"Solo localhost",localhostHint:"Vincular a 127.0.0.1. Mejor cuando solo esta máquina debe abrir el panel.",allInterfacesLabel:"Todas las interfaces",allInterfacesHint:"Vincular a 0.0.0.0. Ideal para acceso por LAN, proxies inversos u otros puntos de entrada externos.",saveNetworkMode:"Guardar modo de red predeterminado",saving:"Guardando…",networkRestartHint:"Se aplica en el próximo reinicio independiente. La ejecución actual permanece vinculada a {{host}}.",networkSavedAll:"Modo de red independiente predeterminado establecido en todas las interfaces (0.0.0.0). Reinicia el modo independiente para aplicarlo.",networkSavedLocal:"Modo de red independiente predeterminado establecido en solo localhost. Reinicia el modo independiente para aplicarlo.",securitySection:"Seguridad del panel",passwordSet:"Actualmente se requiere una contraseña local para el acceso desde el navegador. Las sesiones existentes se rotan cuando la cambias.",passwordNotSet:"Aún no se ha establecido ninguna contraseña independiente. Si sueles ejecutar con --host, se recomienda encarecidamente establecer una.",currentPasswordPlaceholder:"Contraseña actual",currentPasswordFirstTimePlaceholder:"Contraseña actual (no necesaria para la primera configuración)",newPasswordPlaceholder:"Nueva contraseña",newPasswordFirstTimePlaceholder:"Nueva contraseña independiente",confirmPasswordPlaceholder:"Confirmar nueva contraseña",updatePassword:"Actualizar contraseña",enablePassword:"Habilitar contraseña",disablePassword:"Deshabilitar contraseña",passwordUpdated:"Contraseña independiente actualizada.",passwordEnabled:"Contraseña independiente habilitada.",passwordDisabled:"Contraseña independiente deshabilitada.",passwordTooShort:"La contraseña debe tener al menos 4 caracteres.",passwordMismatch:"La nueva contraseña y la confirmación no coinciden.",appearanceSection:"Apariencia",fontsLabel:"Fuentes",fontsDescription:"Anulaciones tipográficas exclusivas del modo independiente para el texto del chat, el código markdown y la salida del terminal.",fontsSaved:"Fuentes de chat independientes guardadas para este panel autoalojado.",profileSection:"Perfil",displayNameLabel:"Nombre visible",displayNameHint:"Tu nombre mostrado en los hilos de chat y en el panel del equipo.",displayNamePlaceholder:"Anónimo"},onboarding:{title:"Te damos la bienvenida a ADHDev",skip:"Omitir",installing:"Instalando…",done:"Listo",installCount:"Instalar {{count}}",selectedCount_one:"{{count}} seleccionado",selectedCount_other:"{{count}} seleccionados",intro:"Elige los proveedores que quieras usar. De forma predeterminada se seleccionan los tres proveedores CLI con soporte oficial; puedes instalar proveedores de IDE o extensiones desde las pestañas de abajo, o más tarde desde Machines → Providers.",loadingRegistry:"Cargando registro…",loadError:"Error al cargar el registro: {{error}}",noProviders:"No hay proveedores en esta categoría.",installed:"✓ instalado",installFailed:"✗ {{error}}"},about:{title:"Acerca de",subtitle:"Resumen de ADHDev autoalojado, funciones integradas y qué cambia en Cloud",selfHostedEdition:"Edición autoalojada",headline:"Mantén la misma experiencia del panel, con el runtime totalmente en el dispositivo.",description:"Standalone mantiene el navegador, el daemon, las capturas de pantalla y la ruta de control en tu propia máquina. Aparte de la conectividad multimáquina y las notificaciones móviles, es la misma experiencia de producto central que Cloud.",docs:"Docs ↗",github:"GitHub ↗",tryCloud:"Probar Cloud ↗",includedSection:"Incluido en standalone",includedDescription:"El conjunto de funciones local-first disponible sin el plano de control en la nube.",inventorySection:"Inventario integrado",inventoryDescription:"Editores agrupados y superficies de agentes expuestos en el panel de standalone. Estas listas describen el inventario, no un soporte verificado.",cloudExtrasSection:"Extras exclusivos de Cloud",cloudExtrasDescription:"Capacidades que requieren el plano de control alojado o la infraestructura de equipo.",comparisonSection:"Autoalojado vs Cloud",comparisonDescription:"La división del producto de un vistazo.",featureHeader:"Función",selfhostHeader:"Autoalojado",cloudHeader:"Cloud",cloudOptional:"Cloud es opcional, no obligatorio",cloudOptionalDescription:"Puedes permanecer totalmente local en standalone y pasar a Cloud más tarde sin cambiar tu forma de usar el panel.",compareCloud:"Comparar Cloud ↗",discord:"Discord ↗",features:{localFirst:{title:"Runtime local-first",desc:"Todo permanece en tu máquina; el navegador solo se conecta por localhost."},chatRelay:{title:"Relevo de chat de agentes",desc:"Lee y responde conversaciones de IA en tiempo real en los IDE conectados."},screenshots:{title:"Capturas en vivo",desc:"Ve tu IDE directamente en el navegador mediante el stream local de capturas."},remoteControl:{title:"Control remoto",desc:"Haz clic, escribe y dirige tus sesiones de IDE sin cambiar de ventana."},multiIde:{title:"Soporte multi-IDE",desc:"Supervisa VS Code, Cursor, Windsurf y agentes de extensión en un solo lugar."},cli:{title:"Cobertura CLI",desc:"Sigue agentes CLI independientes junto a las sesiones de IDE."}},extras:{anywhere:{title:"Acceso desde cualquier lugar",desc:"Llega a tus máquinas desde otro portátil o el móvil sin abrir puertos locales."},p2pStream:{title:"Stream P2P de baja latencia",desc:"Cloud añade la ruta WebRTC para capturas y control remoto más rápidos."},mobileNotifications:{title:"Notificaciones móviles",desc:"Recibe aprobaciones y actualizaciones de actividad cuando no estés en tu mesa."},restApi:{title:"Acceso REST API",desc:"Integra Slack, CI o herramientas internas con claves API y rutas de servicio."},teamWorkspace:{title:"Espacio de equipo",desc:"Comparte máquinas, vistas de actividad y políticas en un espacio de equipo."},enterpriseControls:{title:"Controles enterprise",desc:"SSO, RBAC, logs de auditoría y políticas gestionadas para equipos de producción."}},comparison:{chatRelay:"Relevo de chat de agentes",screenshots:"Capturas de IDE en vivo",remoteControl:"Control remoto del IDE",multiIde:"Supervisión multi-IDE",extensionCli:"Agentes de extensión y CLI",anyNetwork:"Acceso desde cualquier red",webrtc:"Streaming P2P WebRTC",mobilePush:"Notificaciones push móviles",restApi:"REST API y webhooks",teamCollaboration:"Colaboración en equipo",multiMachineDashboards:"Paneles multi-máquina",ssoRbacAuditLogs:"SSO, RBAC, logs de auditoría"}},fonts:{fontOverridesNotice:"Anulaciones de fuente solo para standalone. No afectan al panel en la nube. Las burbujas de chat, el texto de markdown, los bloques de código, las filas de herramientas y la salida del terminal usan todas las preferencias de abajo.",chat:"Texto del chat",chatDescription:"Texto del asistente/usuario, texto en markdown, tarjetas de pensamiento y notas del sistema.",code:"Bloques de código",codeDescription:"Bloques de código de markdown, código en línea y salida de comandos preformateada.",terminal:"Terminal",terminalDescription:"Tarjetas de transcripción del terminal y filas de herramientas/comandos en el modo chat.",livePreview:"Vista previa en vivo",resolvedStack:"Pila resuelta:",saveFontSettings:"Guardar configuración de fuentes",revertToSaved:"Revertir a lo guardado",resetToDefaults:"Restablecer valores predeterminados",saving:"Guardando…",customFamilyPlaceholder:'p. ej. "Pretendard", "Noto Sans KR", sans-serif',previewSummary:"Chat: {{chat}} · Código: {{code}} · Terminal: {{terminal}}",defaultsSummary:"Predeterminados: {{chat}} / {{code}}",previewNow:"ahora",previewProse:"El texto legible, el <strong>texto en negrita</strong> y el <code>código en línea</code> deben seguir tus preferencias de fuente de standalone.",presets:{default:"Predeterminada",defaultMono:"Monoespaciada predeterminada",custom:"Personalizada…",serif:"Serif"}}},D={login:{eyebrow:"Inicio de sesión en Cloud",title:"Inicia sesión en ADHDev",subtitle:"Conecta tus máquinas, recibe notificaciones de aprobación y finalización, y mantén tus agentes de programación en marcha cuando estés lejos del escritorio.",continueWith:"Continuar con {{provider}}",connecting:"Conectando...",devDivider:"dev",devLogin:"Inicio de sesión Dev (test_jwt_token)",providerNote:"GitHub y Google se usan únicamente para la autenticación.",errorUnverifiedEmail:"Este proveedor de inicio de sesión no devolvió un correo verificado, por lo que no pudimos iniciar tu sesión de forma segura.",termsPrefix:"Al continuar, aceptas nuestros ",termsLink:"Términos de servicio",termsAnd:" y ",privacyLink:"Política de privacidad",termsSuffix:"."},account:{openMachines:"Abrir Máquinas",machinesSummaryShort:"{{count}} de {{limit}}",title:"Cuenta",subtitle:"Perfil, plan y actividad",tabAccount:"Cuenta",tabBilling:"Facturación",tabActivity:"Actividad",profile:"Perfil",noName:"Sin nombre",displayName:"Nombre visible",displayNameDesc:"Tu nombre mostrado en el panel y en los espacios de trabajo de equipo.",nicknamePlaceholder:"Apodo",save:"Guardar",saving:"...",cancel:"Cancelar",saved:"Guardado",edit:"Editar",failedToSave:"Error al guardar",userId:"ID de usuario",loadingProfile:"Cargando perfil...",planLimits:"Límites del plan",limitMachines:"Máquinas",limitP2P:"Máquinas conectadas",limitPushNotifications:"Notificaciones push diarias",limitTurnRelay:"Retransmisión de respaldo",enabled:"Habilitado",disabled:"Deshabilitado",frozen:"Congelado",session:"Sesión",logout:"Cerrar sesión",logoutDesc:"Cierra la sesión de tu cuenta de ADHDev en este dispositivo.",dangerZone:"Zona de peligro",dangerZoneDesc:"Elimina permanentemente tu cuenta y todos los datos asociados. Esta acción no se puede deshacer.",deleteAccount:"Eliminar cuenta",deleteWillRemove:"Esto eliminará permanentemente:",deleteItemProfile:"Tu perfil y credenciales de inicio de sesión",deleteItemKeys:"Todas las claves de API y tokens de conexión",deleteItemWebhooks:"Webhooks e historial de entregas",deleteItemPush:"Suscripciones a notificaciones push",deleteItemSessions:"Sesiones compartidas y registros de auditoría",deleteTypeConfirm:"Escribe {{keyword}} para confirmar:",deleting:"Eliminando...",permanentlyDelete:"Eliminar permanentemente",failedToDeleteAccount:"Error al eliminar la cuenta",registeredMachines:"Máquinas registradas",machinesSummary:"{{count}} registradas · {{online}} en línea",machinesLimit:"(límite: {{limit}})",loadingMachines:"Cargando máquinas...",noMachinesRegistered:"No hay máquinas registradas",runSetupPrefix:"Ejecuta ",runSetupMiddle:", luego inicia ",runSetupSuffix:" en una máquina para registrarla aquí.",removeMachineConfirm:"¿Quitar esta máquina? Necesitará ejecutar `adhdev setup` de nuevo para volver a conectarse.",failedToDeleteMachine:"Error al eliminar la máquina",failedToUpdate:"Error al actualizar",rename:"Cambiar nombre",online:"En línea",connecting:"Conectando",removeMachine:"Quitar máquina",never:"Nunca",frozenFeatureTitle:"Congelado — esta función está en pausa y no está disponible."},billing:{currentPlan:"Plan actual:",statusTrial:"Prueba",statusActive:"Activo",statusPastDue:"Vencido",statusCanceled:"Cancelado",nextBilling:"Próxima facturación: {{date}}",trialEnds:"La prueba termina: {{date}}",accessUntil:"Acceso hasta: {{date}}",updatePayment:"Actualiza tu método de pago",managePayment:"Gestionar pagos y facturas",couldNotOpenPortal:"No se pudo abrir el portal de facturación",checkoutSuccess:"Tu suscripción está activa. ¡Gracias por actualizar!",statMachines:"Máquinas",statSharedSessions:"Sesiones compartidas",statTurnRelay:"Relé TURN",statTurnOn:"Activo",resetsDailyUtc:"Se reinicia a diario a las 00:00 UTC",resetsInHours_one:"~{{count}} h restante",resetsInHours_other:"~{{count}} h restantes",resetsInMinutes_one:"~{{count}} min restante",resetsInMinutes_other:"~{{count}} min restantes",resetsDailyUtcWithLeft:"Se reinicia a diario a las 00:00 UTC · {{left}}",monthly:"Mensual",yearly:"Anual",savePercent:"Ahorra hasta un {{pct}} % al año",pricesInUsd:"Todos los precios en USD",paddleLoading:"Paddle se está cargando, inténtalo de nuevo.",cancelConfirm:"¿Seguro que quieres cancelar tu suscripción? Conservarás el acceso hasta el final de tu período de facturación.",cancelSubscription:"Cancelar suscripción",cancelRetainAccess:"Conservarás el acceso a las funciones de {{plan}} hasta el final de tu período de facturación actual.",cancelTeamDowngrade:" Todos los miembros del equipo pasarán a sus planes personales.",cancelFailed:"No se pudo cancelar la suscripción"},about:{title:"Acerca de",subtitle:"Resumen de la nube, superficies compatibles y capacidades por nivel de plan",cloudEdition:"Edición en la nube",heroTitle:"Controla tus agentes CLI locales desde cualquier lugar — web o móvil.",heroDesc:"ADHDev Cloud muestra en tu navegador los agentes que se ejecutan en tus máquinas: envía prompts, aprueba acciones, orquesta el trabajo entre máquinas y recibe notificaciones en tu teléfono — el código fluye por P2P directamente a tu daemon, nunca a través del servidor.",openDashboard:"Abrir panel",viewMachines:"Ver máquinas",docs:"Documentación ↗",whyTitle:"Por qué ADHDev Cloud",whyDesc:"Capacidades principales disponibles cuando tus máquinas están conectadas mediante el plano de control en la nube.",howTitle:"Cómo funciona",howDesc:"El camino de incorporación en la nube, desde la instalación hasta el control remoto.",repoMeshTitle:"Repo Mesh",repoMeshDesc:"Orquesta agentes entre máquinas — solo en la nube.",meshCard1Title:"Un coordinador, muchos agentes",meshCard1Desc:"Encola tareas contra una misión y deja que los nodos inactivos reclamen trabajo desde una cola local-first basada en extracción. Distribuye entre máquinas y proveedores — Claude Code en una, Codex en otra — y luego converge los resultados desde una única sesión de coordinador.",meshCard2Title:"El mismo repositorio, muchas máquinas a la vez",meshCard2Desc:"Cada nodo es un checkout o un git worktree aislado, de modo que los agentes paralelos nunca colisionan. El Refinery converge cada rama — validar, fusionar, hacer push, limpiar — con un manejo seguro de submódulos. Se ejecuta sobre un canal P2P directo de daemon a daemon; el servidor solo señaliza y autoriza a pares de la misma cuenta.",worksWith:"Compatible con",worksWithDesc:"Agentes CLI, IDE y extensiones de IA compatibles.",groupCli:"Agentes CLI",groupIdes:"IDE",groupExtensions:"Agentes de IA",pricingTitle:"Precios",pricingDesc:"Planes de nube actuales y capacidad de máquinas por nivel.",planPopular:"Popular",readyTitle:"Listo para conectar una máquina",readyDesc:"Entra en tu panel, inspecciona tus máquinas conectadas o continúa en la documentación si aún estás con la configuración.",dashboard:"Panel",machines:"Máquinas",discord:"Discord ↗",github:"GitHub ↗",features:{webControlTitle:"Control web de agentes CLI locales",webControlDesc:"Controla cualquier agente CLI local — Claude Code, Codex, Cursor CLI — desde tu navegador: envía prompts, aprueba acciones y dirige sesiones sin tocar la terminal.",chatRelayTitle:"Relé de chat de agentes",chatRelayDesc:"Lee y responde conversaciones de agentes desde cualquier lugar, incluidas las superficies móviles.",liveViewTitle:"Vista de sesión en vivo",liveViewDesc:"Observa la actividad del agente en tiempo real; en las sesiones de IDE, visualiza y controla la pantalla por P2P sin cambiar de ventana.",mobileTitle:"Listo para móvil",mobileDesc:"Recibe aprobaciones y consulta el progreso mientras estás lejos de tu máquina de desarrollo.",secureTitle:"Seguro por defecto",secureDesc:"El chat, los comandos y las capturas fluyen directamente entre tu navegador y tu daemon a través de WebRTC — la nube solo gestiona los metadatos de autenticación y señalización. Tu código nunca pasa por el servidor."},steps:{step1Title:"Instalación en una línea",step1Desc:"Ejecuta un solo comando en cualquier máquina que quieras controlar. Instala el daemon de ADHDev y la CLI de adhdev.",step2Title:"Iniciar sesión",step2Desc:"Inicia sesión con GitHub o Google y el daemon se empareja con tu cuenta — sin ningún token que copiar.",step3Title:"Controla tus agentes desde cualquier lugar",step3Desc:"La máquina aparece en tu panel al instante. Inicia y controla Claude Code, Codex, Cursor CLI y otros agentes CLI desde la web — también las sesiones de IDE."},plans:{freeName:"Free",proName:"Pro",ultraName:"Ultra",freePer:"/mes",proPer:"/mes",ultraPer:"/mes",freeFeature1:"1 máquina",freeFeature2:"Relé de chat en tiempo real",freeFeature3:"Control web de tus agentes locales",proFeature1:"2 máquinas",proFeature2:"Agentes de IA ilimitados",proFeature3:"Vista remota P2P",ultraFeature1:"5 máquinas — tarifa plana, no por puesto",ultraFeature2:"Todo lo de Pro",ultraFeature3:"Mayor concurrencia y límites de uso",ultraFeature4:"Minutos de captura diarios ilimitados"}},layout:{adminSection:"Admin",adminOverview:"Overview",adminUsers:"Users",adminAuditLogs:"Audit Logs",adminSystem:"System",adminTokens:"Tokens de admin",adminEntry:"Admin",footerPlanTitle:"Plan actual: {{plan}} — gestionar o mejorar",expandSidebar:"Expandir barra lateral",collapseSidebar:"Contraer barra lateral",collapse:"Contraer",logout:"Cerrar sesión",machineLimitBadge:"Máquinas llenas",machineLimitBadgeTitle:"Has alcanzado el límite de {{count}} máquina{{plural}} de tu plan — abre facturación para mejorar",pushBudget:"Notificaciones diarias {{used}}/{{limit}}"},settings:{title:"Ajustes",subtitle:"Apariencia y preferencias",appearanceTitle:"Apariencia"},planCard:{unlimited:"Ilimitado",machineSingular:"{{count}} máquina",machinePlural:"{{count}} máquinas",sharedSessionSingular:"{{count}} sesión compartida",sharedSessionPlural:"{{count}} sesiones compartidas",teamMemberSingular:"{{count}} miembro del equipo",teamMemberPlural:"{{count}} miembros del equipo",turnIncluded:"Relé TURN incluido",recommended:"Recomendado",currentPlan:"Plan actual",contactUs:"Contáctanos",freeForever:"Gratis para siempre",startTrial:"Iniciar prueba gratuita de 7 días",upgradeTo:"Mejorar a {{name}}",noChargeCancel:"Sin cargo durante 7 días. Cancela cuando quieras.",periodSeatMo:"puesto/mes",periodMo:"mes",yearlyNote:"${{yearly}}/año — Ahorra ${{saved}}",pricingCustom:"Personalizado"},activity:{origin:{ide:"IDE",extension:"Extensión",admin:"Administración",webhook:"Webhook",web:"Panel",user:"Usuario",terminal:"Terminal",system:"Sistema",registry:"Registro",mesh:"Mesh",machine:"Máquina",daemon:"Daemon",connection:"Conexión",cli:"CLI",auth:"Inicio de sesión",api_key:"Clave de API",api:"API",agent:"Agente"},filterPlaceholder:"Filtrar por acción, recurso u origen...",refresh:"Actualizar",loading:"Cargando...",noLogs:"Sin registros",noMatchingLogs:"No se encontraron registros coincidentes.",logsWillAppear:"Las acciones aparecerán aquí a medida que ocurran.",colAction:"Acción",colResource:"Recurso",colSource:"Origen",colTime:"Hora",logCount:"{{count}} registros",logCountFiltered:" (filtrado de {{total}})",action:{login:"Inicio de sesión",logout:"Cierre de sesión",api_key_create:"Clave de API creada",api_key_revoke:"Clave de API revocada",agent_command:"Comando de agente enviado",terminal_exec:"Comando de terminal ejecutado",ide_command:"Comando de IDE enviado",daemon_command:"Comando de daemon enviado",daemon_disconnect:"Daemon desconectado",daemon_revoke:"Daemon revocado",webhook_create:"Webhook creado",webhook_delete:"Webhook eliminado",webhook_toggle:"Webhook alternado",registry_publish:"Proveedor publicado",registry_promote:"Proveedor promovido",registry_yank:"Proveedor retirado",registry_publish_token_issued:"Token de publicación del registro emitido",machine_registered:"Máquina registrada",machine_secret_rotated:"Secreto de máquina rotado",shortcut_launch:"Sesión iniciada",shortcut_stop:"Sesión detenida",shortcut_chat:"Mensaje de chat enviado",shortcut_chat_debug_bundle:"Paquete de depuración de chat exportado",shortcut_approve:"Acción del agente aprobada",shortcut_reject:"Acción del agente rechazada",shortcut_git_push:"Cambios de git enviados",shortcut_git_checkpoint:"Punto de control de git creado",shortcut_mesh_clone_node:"Nodo de malla clonado",shortcut_mesh_remove_node:"Nodo de malla eliminado",shortcut_mesh_refine_node:"Nodo de malla refinado",admin_plan_change:"Plan de usuario cambiado",admin_role_change:"Rol de usuario cambiado",admin_user_suspend:"Usuario suspendido",admin_user_unsuspend:"Suspensión de usuario levantada",admin_machine_delete:"Máquina eliminada",admin_token_create:"Token de administrador creado",admin_apikey_rate_limit:"Límite de tasa de clave de API cambiado",admin_apikey_scopes:"Alcances de clave de API cambiados",admin_apikey_revoke:"Clave de API revocada",admin_plan_limits_update:"Límites del plan actualizados",admin_plan_limits_reset:"Límites del plan restablecidos",admin_config_update:"Configuración del sistema actualizada",admin_announcement:"Anuncio del sistema publicado",admin_disconnect:"Conexión desconectada"}},webhooks:{title:"Webhooks",subtitle:"Notificaciones de eventos en tiempo real",addWebhook:"+ Añadir webhook",eventDaemonConnect:"Daemon conectado",eventDaemonDisconnect:"Daemon desconectado",eventAgentStatus:"Cambio de estado del agente",eventApprovalRequired:"Aprobación requerida",failed:"Fallido",deleteConfirm:"¿Eliminar este webhook?",testFailed:"La prueba falló",secretTitle:"Secreto del webhook",secretShownOncePrefix:"Se muestra ",secretShownOnce:"solo una vez",secretShownOnceSuffix:". Úsalo para verificar ",copy:"Copiar",done:"Listo",newWebhook:"Nuevo webhook",labelUrl:"URL",urlPlaceholder:"https://your-service.com/webhook",labelEvents:"Eventos",allEvents:"Todos los eventos (*)",creating:"Creando...",create:"Crear",cancel:"Cancelar",loading:"Cargando...",noWebhooks:"Sin webhooks",noWebhooksDesc:"Recibe notificaciones en tiempo real sobre eventos.",setupFirst:"Configurar el primer webhook",off:"OFF",autoDisabled:"Desactivado automáticamente",autoDisabledTitle:"Desactivado automáticamente tras 10 fallos consecutivos",failuresWarning:"{{count}} fallos",failuresTitle:"{{count}} fallos consecutivos — se desactivará automáticamente a los 10",all:"TODOS",history:"Historial",test:"Probar",delete:"Eliminar",deleting:"...",recentDeliveries:"Entregas recientes",refresh:"Actualizar",noDeliveries:"Aún no hay entregas. Envía una prueba para verificar.",request:"SOLICITUD",response:"RESPUESTA",securityTitle:"Seguridad",securityVerifyPrefix:"Verifica ",securityVerifySuffix:" con tu secreto",securityHttps:"Usa solo endpoints HTTPS",securityAsync:"Devuelve 2xx de inmediato, procesa de forma asíncrona",securityAutoDisable:"Desactivado automáticamente tras 10 fallos consecutivos"},apiKeys:{title:"Claves de API",keyCount:"{{count}} claves",playground:"Playground",create:"+ Crear",scopeDaemonRead:"Lectura de daemon",scopeDaemonReadDesc:"Listar daemons y estado",scopeDaemonControl:"Control de daemon",scopeDaemonControlDesc:"Comandos, iniciar/detener, desconectar",scopeAgentRead:"Lectura de agente",scopeAgentReadDesc:"Estado e historial de chat",scopeAgentControl:"Control de agente",scopeAgentControlDesc:"Enviar, aprobar/rechazar",scopeTerminal:"Terminal",scopeTerminalDesc:"Ejecutar comandos",scopeWebhooks:"Webhooks",scopeWebhooksDesc:"Gestionar hooks y entregas",frozen:"Congelada",revokeConfirm:"¿Revocar esta clave de API? Esto no se puede deshacer.",failedToLoad:"Error al cargar",failed:"Error",upgradePlan:"Mejora tu plan →",keyCreated:"¡Clave creada!",copyNow:"Copia ahora — se muestra solo una vez.",copied:"Copiado",copy:"Copiar",testKey:"Probar",dismiss:"Descartar",playgroundTitle:"Área de pruebas de API",enterKeyToTest:"Introduce una clave de API para probar.",open:"Abrir",createKeyTitle:"Crear clave de API",labelName:"Nombre",namePlaceholder:"p. ej. Production Bot",permissions:"Permisos ({{count}})",createBtn:"Crear",cancel:"Cancelar",loading:"Cargando...",noKeys:"Sin claves de API",noKeysDesc:"Crea una clave para integrar con servicios externos.",createFirstKey:"Crear primera clave",usedDate:"Usada el {{date}}",neverUsed:"Nunca usada",revoke:"Revocar",usageLabel:"Uso:",apiReference:"Referencia de API →",frozenFeatureTitle:"Congelado — esta función está en pausa."},shareModal:{title:"Compartir sesión",chatView:{label:"Solo ver",desc:"Leer la conversación con IA en tiempo real"},chatControl:{label:"Control",desc:"Leer + enviar mensajes + aprobar/rechazar acciones"},remoteView:{label:"Solo ver",desc:"Ver capturas de pantalla y chat en tiempo real"},remoteControl:{label:"Control",desc:"Capturas de pantalla + enviar mensajes + aprobar/rechazar"},remoteFull:{label:"Acceso completo",desc:"Control remoto completo, incluida la entrada de escritorio"}},onboarding:{title:"Conecta tu primera máquina",subtitle:"Instala ADHDev en una máquina e inicia sesión — se empareja sola y aparece aquí. Luego controla cada agente de esa máquina desde este panel.",platformMac:"macOS / Linux",platformWindows:"Windows",copyTitle:"Haz clic para copiar",copiedLabel:"✓ Copiado",copyLabel:"Copiar",listeningLabel:"Esperando tu daemon — mantén esta página abierta, aparecerá automáticamente.",connectingLabel:"Conectando con ADHDev…",step1Title:"Instala el daemon",step1Desc:"Ejecuta el comando de arriba en cualquier máquina que quieras controlar. Instala el daemon más el CLI de adhdev.",step2Title:"Inicia sesión — la máquina se empareja sola",step2Desc:"El daemon se vincula a esta cuenta automáticamente. No hay ningún token que copiar; aparece aquí en cuanto se conecta.",step3Title:"Inicia tu primera sesión",step3Desc:"Una vez que una máquina esté en línea, inicia Claude Code, Codex, Cursor y otros agentes directamente desde el panel.",readDocs:"Lee la documentación →",reconnectingLabel:"Conexión perdida — reconectando… Comprueba tu red si esto persiste.",offlineLabel:"Estás sin conexión. Vuelve a conectarte a internet y esta página se reanudará automáticamente.",authFailedLabel:"La sesión ha expirado — inicia sesión de nuevo para continuar.",machineLimitLabel:"Límite de máquinas alcanzado: tu plan permite hasta {{limit}}. Elimina una máquina o mejora tu plan para conectar esta.",machineLimitManage:"Gestionar máquinas →",machineLimitUpgrade:"Mejorar plan →",setupWizardLink:"¿Prefieres una configuración guiada? Abrir el asistente de configuración →"},legal:{navHome:"Inicio",navDashboard:"Panel",footerHome:"Inicio",footerTerms:"Términos",footerPrivacy:"Privacidad",footerRefund:"Política de reembolsos",footerCopyright:"© 2026 RacoLab. All rights reserved."},authCallback:{authFailed:"Error de autenticación",backToLogin:"Volver al inicio de sesión",completing:"Completando la autenticación...",noTokenError:"No se recibió ningún token de acceso"},cliAuth:{title:"Autenticación de ADHDev CLI",verifying:"Verificando...",authorizeAs:"¿Autorizar la CLI como {{name}}?",noCodeError:"No se proporcionó ningún código de autenticación.",approve:"✓ Aprobar",signInFirst:"Inicia sesión primero para autorizar la CLI.",signIn:"Iniciar sesión →",failed:"Error",successMessage:"¡Autenticación de la CLI completada!",returnToTerminal:"Puedes volver a la terminal.",registryPublishTitle:"Autorizar publicación en el registro",authorizeRegistryPublishAs:"¿Conceder acceso de publicación al registro de proveedores como {{name}}?",registryPublishWarning:"Esto concede un token de corta duración (15 minutos) que puede publicar, promover y retirar paquetes de proveedores en el registro. No es un registro de daemon. Apruébalo solo si iniciaste una publicación en el registro. Requiere una cuenta de administrador.",signInFirstRegistryPublish:"Inicia sesión con una cuenta de administrador para autorizar la publicación en el registro.",approving:"Aprobando…",errorFriendly:"No se pudo completar la autorización de la CLI.",tryAgain:"Reintentar"},privacy:{title:"Política de privacidad",lastUpdated:"Última actualización: 27 de septiembre de 2026",intro:"Esta Política de privacidad describe cómo RacoLab («nosotros», «nos», «nuestro») recopila, usa y protege tu información cuando utilizas el servicio ADHDev («Servicio») en",s1Title:"1. Información que recopilamos",s1h1:"1.1 Información de la cuenta",s1p1:"Cuando creas una cuenta, recopilamos la información proporcionada por tu proveedor de autenticación (GitHub o Google), incluidos tu nombre, dirección de correo electrónico e imagen de perfil.",s1h2:"1.2 Datos de IDE y agentes",s1p2:"Cuando conectas tu entorno de desarrollo al Servicio, el daemon local puede transmitir:",s1l1:"Tipo y versión del IDE (p. ej., «Cursor 0.49.1»)",s1l2:"Información del agente de IA activo (nombre, estado, modelo actual)",s1l3:"Mensajes de chat entre tú y los agentes de IA",s1l4:"Capturas de pantalla del IDE (transmitidas por P2P, no almacenadas en nuestros servidores)",s1l5:"Rutas del área de trabajo y nombres de archivos abiertos",s1l6:"Información de la máquina (nombre de host, SO, uso de memoria)",s1h3:"1.3 Datos de uso",s1p3:"Recopilamos automáticamente información de uso, incluidas las llamadas a la API, los patrones de uso de funciones y los registros de conexión, con fines de mejora del servicio y depuración.",s1p3Attribution:"También contamos las visitas por fuente de tráfico solo de forma agregada (etiquetas de campaña como utm_source, el dominio del sitio web de referencia y la página de llegada, guardados en el almacenamiento local de su navegador, sin dirección IP, identificador de dispositivo ni cookies), y al crear una cuenta registramos la fuente de su primera visita para saber qué canales atraen a nuevos usuarios.",s1h4:"1.4 Información de pago",s1p4:"El procesamiento de pagos lo gestiona íntegramente nuestro Merchant of Record, Paddle (Paddle.com Market Limited). No recopilamos ni almacenamos directamente números de tarjetas de crédito, datos de cuentas bancarias ni otra información financiera. Consulta",s1p4PaddleLink:"la Política de privacidad de Paddle",s1p4Suffix:"para conocer sus prácticas de tratamiento de datos.",s2Title:"2. Cómo usamos tu información",s2p1:"Usamos la información recopilada para:",s2l1:"Proporcionar y mantener el Servicio",s2l2:"Autenticar tu identidad y gestionar tu cuenta",s2l3:"Enrutar comandos y datos entre tu panel y las máquinas conectadas",s2l4:"Enviar notificaciones (de navegador y push) sobre cambios de estado de los agentes",s2l5:"Procesar la facturación y la gestión de suscripciones (a través de Paddle)",s2l6:"Detectar y prevenir abusos o accesos no autorizados",s2l7:"Mejorar el Servicio y desarrollar nuevas funciones",s2l8:"Responder a las solicitudes de soporte",s3Title:"3. Almacenamiento y seguridad de los datos",s3h1:"3.1 Infraestructura",s3p1:"Nuestro Servicio se ejecuta en la red global de Cloudflare mediante Cloudflare Workers, Durable Objects y D1 Database. Los datos se almacenan en la infraestructura de Cloudflare y están sujetos a",s3p1CloudflareLink:"la Política de privacidad de Cloudflare",s3h2:"3.2 Datos P2P",s3p2:"Las capturas de pantalla del IDE y los datos de terminal en tiempo real se transmiten directamente entre tu navegador y tu máquina mediante conexiones punto a punto de WebRTC. Estos datos no pasan por nuestros servidores ni se almacenan en ellos.",s3h3:"3.3 Medidas de seguridad",s3p3:"Implementamos las siguientes medidas de seguridad:",s3l1:"Autenticación basada en JWT con tokens de acceso de corta duración y rotación de tokens de actualización",s3l2:"Conexiones WebSocket cifradas (WSS/TLS)",s3l3:"Tokens por conexión para la autenticación del daemon",s3l4:"Limitación de velocidad en todos los endpoints de la API",s3l5:"Registro de auditoría para operaciones sensibles a la seguridad",s4Title:"4. Compartición de datos",s4p1:"No vendemos tus datos personales a terceros. Podemos compartir datos con:",s4l1:"Procesamiento de pagos como Merchant of Record",s4l2:"Proveedor de infraestructura (alojamiento, CDN, base de datos)",s4l3Label:"Proveedores de autenticación",s4l3:"GitHub/Google para el inicio de sesión con OAuth",s4p2:"Podemos divulgar datos si así lo exige la ley, un proceso legal, o para proteger nuestros derechos y la seguridad de nuestros usuarios.",s5Title:"5. Conservación de datos",s5p1:"Conservamos los datos de tu cuenta mientras esta esté activa. Los mensajes de chat y los datos de actividad de los agentes se conservan hasta 90 días para el funcionamiento del servicio.",s5p2:"Tras la eliminación de la cuenta, borraremos tus datos personales en un plazo de 30 días. Algunos datos de uso anonimizados podrán conservarse con fines analíticos.",s6Title:"6. Tus derechos",s6p1:"Tienes derecho a:",s6l1Label:"Acceso",s6l1:"Solicitar una copia de tus datos personales",s6l2Label:"Rectificación",s6l2:"Actualizar o corregir tu información personal",s6l3Label:"Eliminación",s6l3:"Solicitar la eliminación de tu cuenta y los datos asociados",s6l4Label:"Exportación",s6l4:"Descargar tus datos en un formato portable",s6l5Label:"Oposición",s6l5:"Oponerte a ciertas actividades de tratamiento de datos",s6p2:"Para ejercer estos derechos, contáctanos en",s7Title:"7. Cookies",s7p1:"Usamos cookies esenciales únicamente para la autenticación (tokens de sesión) y las preferencias del usuario (tema, configuración de notificaciones). No usamos cookies de publicidad ni de seguimiento.",s8Title:"8. Privacidad de los menores",s8p1:"El Servicio no está destinado a usuarios menores de 16 años. No recopilamos conscientemente información personal de menores de 16 años.",s9Title:"9. Transferencias internacionales de datos",s9p1:"Tus datos pueden procesarse en distintas ubicaciones a través de la red global de Cloudflare. Al usar el Servicio, consientes la transferencia y el tratamiento de tus datos en dichas ubicaciones.",s10Title:"10. Cambios en esta política",s10p1:"Podemos actualizar esta Política de privacidad de vez en cuando. Te notificaremos cualquier cambio importante por correo electrónico o a través del Servicio. El uso continuado tras los cambios constituye la aceptación de la política actualizada.",s11Title:"11. Contacto",s11p1:"Para preguntas sobre esta Política de privacidad o el tratamiento de datos:",s11l1Prefix:"Correo electrónico:",s11l2Prefix:"Sitio web:"},terms:{title:"Términos del servicio",lastUpdated:"Última actualización: 11 de abril de 2026",intro:"Te damos la bienvenida a ADHDev («Servicio»), operado por RacoLab («nosotros», «nos», «nuestro»). Al acceder o usar nuestro Servicio en",introSuffix:"aceptas quedar vinculado por estos Términos del servicio («Términos»). Si no estás de acuerdo, no uses el Servicio.",s1Title:"1. Descripción del servicio",s1p1:"ADHDev es una herramienta para desarrolladores en la nube que permite la supervisión y el control remotos de agentes de codificación de IA (como Cursor, VS Code, Antigravity, Claude Code, entre otros) a través de paneles web y móviles. El Servicio incluye un daemon local, paneles remotos, acceso a la REST API y notificaciones de navegador y push.",s2Title:"2. Registro de cuenta",s2p1:"Debes crear una cuenta para usar el Servicio. Eres responsable de mantener la confidencialidad de las credenciales de tu cuenta. Aceptas proporcionar información precisa y completa durante el registro y mantener actualizada la información de tu cuenta.",s2p2:"Debes tener al menos 16 años para usar el Servicio. Al crear una cuenta, declaras que cumples este requisito de edad.",s3Title:"3. Planes de suscripción y facturación",s3p1:"El Servicio ofrece los siguientes planes:",s3l1:"Funciones limitadas, 1 máquina conectada",s3l2:"2 máquinas conectadas, agentes ilimitados, vista remota P2P, prueba gratuita de 7 días",s3l3:"5 máquinas conectadas, todo lo de Pro más mayor concurrencia y límites de uso (precio único, no por asiento)",s3p2:"Las suscripciones de pago se facturan por adelantado de forma mensual o anual. Todos los pagos son procesados por nuestro socio de pagos, Paddle (Paddle.com Market Limited), que actúa como Merchant of Record en todas las transacciones.",s4Title:"4. Política de reembolsos",s4p1:"Ofrecemos una garantía de devolución del dinero de 14 días para todos los planes de pago. Si no estás satisfecho con el Servicio, puedes solicitar un reembolso completo dentro de los 14 días posteriores a tu compra inicial contactándonos en",s4p2:"Los reembolsos de las renovaciones se gestionan caso por caso. También se aplican las políticas de reembolso de Paddle, ya que actúa como Merchant of Record.",s5Title:"5. Uso aceptable",s5p1:"Aceptas no:",s5l1:"Usar el Servicio con fines ilícitos o en violación de las leyes aplicables",s5l2:"Intentar obtener acceso no autorizado a las cuentas o los datos de otros usuarios",s5l3:"Aplicar ingeniería inversa, descompilar o intentar extraer el código fuente de los componentes de servidor del Servicio",s5l4:"Usar el Servicio para transmitir malware, spam u otro contenido dañino",s5l5:"Revender o redistribuir el Servicio sin nuestro consentimiento por escrito",s5l6:"Interferir o alterar la integridad o el rendimiento del Servicio",s6Title:"6. Propiedad intelectual",s6p1:"El Servicio, incluidos su contenido original, características y funcionalidad, es propiedad de RacoLab y está protegido por las leyes de propiedad intelectual aplicables. El componente del daemon local está disponible bajo una licencia de código abierto según se especifica en el repositorio del proyecto.",s6p2:"Usted conserva la propiedad de todos los datos y el contenido que transmite a través del Servicio.",s7Title:"7. Datos y privacidad",s7p1:"Su uso del Servicio también se rige por nuestra",s7PrivacyLink:"Política de Privacidad",s7p1Suffix:"El Servicio procesa las interacciones con el IDE, los mensajes de chat y las capturas de pantalla con el fin de supervisar y controlar de forma remota. No vendemos sus datos a terceros.",s8Title:"8. Disponibilidad del servicio",s8p1:"Nos esforzamos por mantener una alta disponibilidad, pero no garantizamos un acceso ininterrumpido. El Servicio puede no estar disponible temporalmente debido a mantenimiento, actualizaciones o circunstancias fuera de nuestro control. No somos responsables de las pérdidas derivadas de interrupciones del servicio.",s9Title:"9. Limitación de responsabilidad",s9p1:"EN LA MÁXIMA MEDIDA PERMITIDA POR LA LEY, RacoLab NO SERÁ RESPONSABLE DE NINGÚN DAÑO INDIRECTO, INCIDENTAL, ESPECIAL, CONSECUENTE O PUNITIVO, NI DE NINGUNA PÉRDIDA DE BENEFICIOS O INGRESOS, YA SEA INCURRIDO DIRECTA O INDIRECTAMENTE, QUE SURJA DE SU USO DEL SERVICIO.",s9p2:"Nuestra responsabilidad total por cualquier reclamación derivada del Servicio no excederá el importe que usted nos haya pagado en los 12 meses anteriores a la reclamación.",s10Title:"10. Terminación",s10p1:"Podemos suspender o cancelar su acceso al Servicio en cualquier momento por infracciones de estos Términos o por cualquier otro motivo, a nuestra entera discreción. Puede cancelar su cuenta en cualquier momento desde la página de Configuración. Tras la cancelación, sus datos se eliminarán en un plazo de 30 días.",s11Title:"11. Cambios en los Términos",s11p1:"Nos reservamos el derecho de modificar estos Términos en cualquier momento. Le notificaremos los cambios importantes por correo electrónico o a través del Servicio. Su uso continuado tras los cambios constituye la aceptación de los Términos modificados.",s12Title:"12. Ley aplicable",s12p1:"Estos Términos se regirán e interpretarán de conformidad con las leyes de la República de Corea, sin tener en cuenta las disposiciones sobre conflicto de leyes.",s13Title:"13. Contacto",s13p1:"Si tiene alguna pregunta sobre estos Términos, contáctenos:",s13l1Prefix:"Correo electrónico:",s13l2Prefix:"Sitio web:"},refund:{title:"Política de reembolsos",lastUpdated:"Última actualización: 24 de marzo de 2026",intro:"ADHDev es operado por RacoLab. Todos los pagos son procesados por nuestro Comerciante Registrado (Merchant of Record),",introSuffix:"que gestiona la facturación, las facturas y los reembolsos en nuestro nombre.",s1Title:"1. Garantía de reembolso de 14 días",s1p1:"Ofrecemos una garantía de reembolso de 14 días en todos los planes de pago (Pro). Si no está satisfecho con el Servicio por cualquier motivo, puede solicitar un reembolso completo dentro de los 14 días posteriores a la compra inicial de su suscripción.",s1p2:"Para solicitar un reembolso, contáctenos en",s1p2Suffix:"con el correo electrónico de su cuenta y los detalles del pedido. Procesaremos su solicitud en un plazo de 3 días hábiles.",s2Title:"2. Reembolsos de renovaciones",s2p1:"Los reembolsos por renovaciones de suscripción (mensuales o anuales) se gestionan caso por caso. Si se le cobró una renovación que no tenía intención de realizar, contáctenos dentro de los 7 días posteriores al cargo en",s3Title:"3. Casos no reembolsables",s3p1:"No se emitirán reembolsos por:",s3l1:"Solicitudes realizadas después del período de garantía de 14 días para compras iniciales",s3l2Prefix:"Cuentas suspendidas o canceladas debido a infracciones de nuestros",s3l2Link:"Términos de Servicio",s3l3:"Meses parciales de servicio ya utilizados fuera del plazo de reembolso",s4Title:"4. Cómo se procesan los reembolsos",s4p1:"Los reembolsos aprobados se procesan a través de Paddle y se devuelven al método de pago original. Según su banco o emisor de la tarjeta, los reembolsos pueden tardar de 5 a 10 días hábiles en aparecer. También se aplican los propios",s4p1RefundLink:"términos de reembolso",s4p1Suffix:"de Paddle.",s5Title:"5. Cancelación",s5p1Prefix:"Puede cancelar su suscripción en cualquier momento desde la página de",s5p1BillingLink:"Facturación",s5p1Suffix:"en su panel. La cancelación detiene los cargos futuros. Conserva el acceso a las funciones de su plan hasta el final del período de facturación actual. La cancelación por sí sola no genera un reembolso.",s6Title:"6. Contacto",s6p1:"Para solicitudes de reembolso o preguntas sobre facturación:",s6l1Prefix:"Correo electrónico:",s6l2Prefix:"Sitio web:"},sessionShare:{loading:"Cargando sesión...",sessionNotFound:"Sesión no encontrada",noLongerAvailable:"Esta sesión ya no está disponible",homeBtn:"← Inicio de ADHDev",sharedSession:"Sesión compartida",host:"Anfitrión",mode:"Modo",permission:"Permiso",auth:"Autenticación",authRequired:"Se requiere una cuenta",viewers:"Espectadores",joinChat:"Unirse al chat",joinSession:"Unirse a la sesión",expires:"Vence: {{date}}",chatLabel:"Chat",remoteLabel:"Remoto",waitingMessages:"Esperando mensajes...",connecting:"Conectando... ({{state}})",sendMessageAs:"Enviar mensaje como {{name}}...",sendAs:"Enviar como {{name}}...",ownerChat:"Chat de {{name}}",ownerSession:"Sesión de {{name}}",agentName:"Agente de {{name}}",fullControlBadge:"Control total activo",failedToJoin:"No se pudo unir a la sesión",sessionRevoked:"El anfitrión ha revocado la sesión",sessionExpired:"La sesión ha caducado",authRequired2:"Se requiere autenticación para compartir con control",unknownError:"Error desconocido"},apiPlayground:{title:"API Playground",history:"Historial ({{count}})",apiRelayWarning:"El relé de la API del daemon es opcional. Las rutas de proxy REST de comandos/chat permanecen deshabilitadas a menos que ese daemon las habilite explícitamente con `adhdev daemon:api enable`.",authBearer:"Authorization: Bearer {{key}}",copyAsCurl:"cURL",copied:"Copiado",targetDaemon:"Daemon de destino",quickActions:"Acciones rápidas",requestBody:"Cuerpo de la solicitud (JSON)",recentRequests:"Solicitudes recientes",clearHistory:"Borrar",noDaemonsWarning:"No hay daemons conectados. Inicia un daemon primero o reemplaza {daemonId} manualmente.",send:"▶ Enviar",sending:"⏳"},announcementBanner:{visibleUntil:"Visible hasta {{time}}",dismiss:"Descartar"},push:{budgetResetsShort:"Se restablece a las {{time}}",budgetRemainingShort:"Quedan {{count}} hoy en tu plan",budgetShort:"{{used}}/{{limit}} hoy",title:"Notificaciones push",descUnsupported:"No compatible con este navegador",descDenied:"Bloqueado — actívalo en la configuración del navegador",descEnabled:"Activadas",descDefault:"Avisos incluso con la pestaña cerrada",docsLink:"Documentación de notificaciones push",sent:"Enviado",test:"Probar",iosHint:"En iPhone y iPad, las notificaciones push solo funcionan desde la PWA de Safari instalada. Una pestaña normal de Safari no puede recibir notificaciones push de ADHDev.",unsupportedWarning:"Este navegador no admite Web Push aquí. Usa la PWA de Safari en iPhone/iPad o un navegador Chromium en escritorio/Android.",deniedWarning:"Las notificaciones están bloqueadas en la configuración del navegador o del sitio. Vuelve a habilitarlas allí y luego activa de nuevo las notificaciones push.",registeredDevices:"Dispositivos registrados: {{count}}",noDevices:"No se encontraron dispositivos push activos.",deviceLabel:"Dispositivo {{number}}",thisDevice:"Este dispositivo",lastActive:"Última actividad",removing:"Eliminando...",removeHere:"Eliminar aquí",remove:"Eliminar"},mesh:{manualMcpSetup:"Este proveedor requiere una configuración manual de MCP antes de poder actuar como coordinador de Repo Mesh.",couldNotLoadMeshes:"No se pudieron cargar las meshes",untitledMesh:"Mesh sin título",chooseMachineFirst:"Elige una máquina primero.",launchFailed:"Error al iniciar",coordinatorLaunchFailed:"Error al iniciar el coordinador",coordinatorLaunched:"Coordinador iniciado ({{sessionId}})",coordinatorLaunchSent:"Comando de inicio del coordinador enviado"},plans:{free:"Free",pro:"Pro",ultra:"Ultra",team:"Team",enterprise:"Enterprise"},adminAudit:{title:"Auditoría global",subtitle:"Seguimiento de eventos en todo el sistema",allActions:"Todas las acciones",allSources:"Todas las fuentes",filter:"Filtrar",noLogs:"No se encontraron registros",loading:"Cargando...",loadMore:"Cargar más ↓"},adminDashboard:{failedToLoad:"Error al cargar los datos de administración",title:"Panel de administración",subtitle:"Resumen y gestión del servicio",accessDenied:"Acceso de administrador denegado",backToDashboard:"Volver al panel",loading:"Cargando el panel de administración",loadingDesc:"Recopilando estadísticas del servicio y la actividad de auditoría reciente.",totalUsers:"Usuarios totales",todayCommands:"Comandos de hoy",activeApiKeys:"Claves de API activas",todayLogins:"Inicios de sesión de hoy",planDistribution:"Distribución de planes",quickActions:"Acciones rápidas",manageUsers:"Gestionar usuarios",apiKeys:"Claves de API",auditLogs:"Registros de auditoría",systemConfig:"Configuración del sistema",recentActivity:"Actividad reciente",viewAll:"Ver todo",noRecentActivity:"Sin actividad reciente"},adminTokens:{title:"Tokens de admin",subtitle:"Emite tokens de API con permisos de admin para automatizar despliegues",superAdminOnly:"Solo super admin",superAdminOnlyDesc:"Solo un super admin puede emitir tokens de admin. Pide uno a un super admin si lo necesitas.",issueTitle:"Emitir un nuevo token",nameLabel:"Nombre",namePlaceholder:"p. ej. deploy-ci",scopesLabel:"Ámbitos",scopesHint:"admin cubre la mayoría de las APIs de administración. super_admin además permite emitir tokens y cambiar roles: concédelo solo si es necesario.",expiryLabel:"Caduca en",expiryDays:"{{count}} días",expiryHint:"Los tokens de admin siempre caducan. El servidor limita la duración a 90 días.",issue:"Emitir token",issuing:"Emitiendo...",issuedTitle:"Copia tu token ahora",issuedWarning:"Esta es la única vez que se muestra el token. Guárdalo en un lugar seguro: no podrás recuperarlo.",issuedMeta:"Ámbitos: {{scopes}} · Caduca: {{expiresAt}}",copy:"Copiar",copied:"Copiado",copyFailed:"Error al copiar: selecciona el token y cópialo manualmente",dismiss:"Cerrar",expiryClamped:"La caducidad se redujo al máximo de 90 días",existingTitle:"Tokens de admin activos",emptyTitle:"Sin tokens de admin",emptyDesc:"Emite uno arriba para autenticar despliegues sin el inicio de sesión del navegador.",expiresAt:"Caduca: {{time}}",lastUsed:"Último uso {{time}}",neverUsed:"Nunca usado",noExpiry:"Sin caducidad",expired:"Caducado",revoke:"Revocar",revokeConfirm:'¿Revocar el token "{{name}}"? Todo lo que lo use dejará de funcionar de inmediato.',revoked:"Token revocado",loading:"Cargando...",error:"Error: {{message}}"},adminSystem:{error:"Error: {{message}}",announcementSent:"Anuncio enviado",announcementCleared:"Anuncio borrado",title:"Configuración del sistema",subtitle:"Anuncios y configuración del sistema",loading:"Cargando la configuración del sistema",loadingDesc:"Obteniendo el estado actual del anuncio.",announcement:"Anuncio",current:"Actual:",untilTime:"(hasta {{time}})",untilCleared:"(hasta que se borre)",announcementPlaceholder:"Introduce el mensaje del anuncio...",severityInfo:"Información",severityWarning:"Advertencia",severityCritical:"Crítico",duration1h:"1 hora",duration6h:"6 horas",duration24h:"24 horas",duration7d:"7 días",durationUntilCleared:"Hasta que se borre",send:"Enviar"},adminUsers:{error:"Error: {{message}}",roleUpdated:"Rol actualizado",planUpdated:"Plan actualizado",suspensionReasonPrompt:"Introduce el motivo de la suspensión:",userSuspended:"Usuario suspendido",userUnsuspended:"Suspensión del usuario retirada",title:"Gestión de usuarios",subtitle:"Gestiona usuarios, roles y suspensiones",usersTotal:"usuarios en total",searchPlaceholder:"Buscar correo o nombre...",allRoles:"Todos los roles",roleUser:"Usuario",roleAdmin:"Administrador",roleSuperAdmin:"Superadministrador",allPlans:"Todos los planes",search:"Buscar",colUser:"Usuario",colRole:"Rol",colPlan:"Plan",colStatus:"Estado",colCreated:"Creado",colActions:"Acciones",noName:"Sin nombre",statusSuspended:"Suspendido",statusActive:"Activo",unsuspend:"Reactivar",suspend:"Suspender",loading:"Cargando...",prev:"← Anterior",next:"Siguiente →"}},T={onboardingTour:{next:"Siguiente",getStarted:"Empezar",learnMore:"Más información en la documentación",closeAria:"Cerrar la introducción",allSetStandalone:{desc:"Este panel ya está conectado a tu daemon local. Inicia una sesión desde la pestaña Panel o añade proveedores en Máquinas → Proveedores.",title:"Todo listo"},getStartedCloud:{desc:"Ejecuta esto en cualquier máquina que quieras manejar e inicia sesión: el daemon se vincula a tu panel automáticamente.",title:"Empezar"},orchestrate:{desc:"Repo Mesh (Cloud Pro) permite que un coordinador reparta trabajo entre agentes de muchas máquinas: worktrees de git en paralelo, convergencia automática de ramas y revisión cruzada del mismo repositorio desde varios ángulos.",title:"Coordina a tus agentes"},watchAndSteer:{desc:"Sigue la sesión de cada agente en tiempo real y dirígela mientras trabaja: cambia de sesión, haz capturas y, en sesiones de IDE, ve y controla la pantalla mediante una conexión directa.",title:"Observa y dirige en vivo"},realtimeChat:{desc:"Mira en tiempo real lo que hace tu agente de IA. Envía mensajes y aprueba o rechaza acciones desde el navegador o el móvil.",title:"Chat en tiempo real"},welcome:{desc:"Maneja cualquier agente de programación CLI local (Claude Code, Codex, Antigravity CLI) desde el navegador o el móvil. Los agentes siguen ejecutándose en tu máquina; tú los controlas desde la web.",title:"Te damos la bienvenida a ADHDev"}},installCommand:{orViaNpm:"O con npm:",clickToCopy:"Clic para copiar"},errorBoundary:{reload:"Recargar página",description:"Se produjo un error inesperado. Recarga la página para continuar.",title:"Algo salió mal"},shellFreshness:{dismissAria:"Cerrar el aviso de actualización",later:"Más tarde",reload:"Recargar",message:"Hay una nueva versión de ADHDev."},dashboardWire:{reloadTitle:"Es necesario recargar",reloadBody:"Esta página es más antigua que el daemon con el que se comunica y no puede leer su estado. Recarga para obtener el panel actual.",reload:"Recargar",daemonUpdateTitle:"Es necesario actualizar el daemon",daemonUpdateBody:"{{count}} máquina(s) ejecutan un daemon más antiguo que este panel no puede leer. Actualízalas con `adhdev update` (o con la acción de actualización de la página de la máquina)."},openMenu:"Abrir menú",closeMenu:"Cerrar menú"},E={loadingOlderMessages:"Cargando mensajes anteriores...",waitingForMessages:"Esperando mensajes...",agentGenerating:"El agente está generando...",jumpToTop:"Ir al principio",jumpToOldestMessages:"Ir a los mensajes más antiguos",top:"↑ Principio",latest:"↓ Más reciente",jumpToLatestMessages:"Ir a los mensajes más recientes",jumpToBottom:"Ir al final",showEarlierMessages:"↑ Mostrar {{count}} mensajes anteriores...",showEarlierMessagesHidden:"↑ Mostrar {{count}} mensajes anteriores... ({{total}} ocultos)",loadOlderMessages:"↑ Cargar mensajes anteriores",loadErrorRetry:"↻ {{error}}"},P={zoomOut:"Alejar",zoomIn:"Acercar",resetZoom:"Restablecer zoom",toggleFullscreen:"Alternar pantalla completa"},L={screenshotAlt:"Pantalla remota",mouse:"Ratón",touch:"Táctil",connected:"Conectado",ws:"Reconectando",direct:"Directo",relay:"Relé",turnBlocked:"Límite diario de vista alcanzado",turnUsage:"Vista {{used}}/{{budget}}m",typeAndEnter:"Escribe y pulsa Enter...",settings:"AJUSTES",zoom:"ZOOM:",fill:"RELLENAR",fit:"AJUSTAR",directP2PTitle:"Conexión P2P directa",turnRelayTitle:"Relé TURN en uso",dailyTurnTitle:"Minutos de vista remota usados hoy (límite del plan)",waitingState:{turnRelayActive:"Relé TURN activo"},waiting:{connectedLabel:"Conectado. Esperando el primer fotograma...",connectingLabel:"Conectando con el host...",reconnectingLabel:"Reconectando con el host...",connectedHint:"El flujo remoto se está preparando",reconnectingHint:"Esperando a que el flujo remoto se ponga al día"},error:{title:"Se perdió la conexión remota",reasonFailed:"No se pudo conectar con este host. Comprueba que el daemon esté en ejecución y vuelve a intentarlo.",reasonDisconnected:"Se perdió la conexión con el host y no se pudo reconectar tras 15 segundos.",retry:"Reintentar"},screenshotViewer:{altText:"Captura de pantalla del IDE",waitingForStream:"Esperando la transmisión de la captura de pantalla...",p2pStatus:"P2P: {{state}}"}},w={openChat:"Abrir chat",openCoordinatorChat:"Abrir chat del coordinador",coordinatorGone:"la sesión del coordinador terminó",chatNotFound:"No hay pestaña de chat para esta sesión en este panel — puede estar ejecutándose en otra máquina.",openChatHint:"Clic para abrir el chat de esta sesión"},k={meshNodeUnavailable:"Información del nodo del mesh no disponible",roleCoordinator:"Coordinador del mesh",rowProviderType:"Tipo de proveedor",rowStarted:"Inicio",copyDiagnostics:"Copiar diagnóstico",gitClean:"sin cambios",gitDirty:"cambios sin confirmar",gitDetached:"(separado)",blockRawMetadata:"Metadatos de ejecución sin procesar",blockFinalPrompt:"Prompt del sistema final",blockExtraPrompt:"Prompt adicional de este inicio",quotaOkNoWindows:"Sin límite",sectionMeshWorker:"Generada por el coordinador",rowMeshId:"Mesh ID",rowTaskId:"Tarea",rowCoordinator:"Coordinador",title:"Información de la sesión",loading:"Cargando…",close:"Cerrar",failedToLoad:"Error al cargar la información de la sesión",stampedToNode:"Esta sesión está asociada a un nodo de malla que el coordinador ya no reporta.",sectionSession:"Sesión",sectionLaunch:"Lanzamiento",sectionMeshNode:"Nodo de malla",sectionMeshCoordinator:"Coordinador de malla",sectionRuntime:"Entorno de ejecución",rowSessionId:"ID de sesión",rowProvider:"Proveedor",rowTransport:"Transporte",rowWorkspace:"Espacio de trabajo",rowSpawnedAt:"Generado a las",rowProviderSessionId:"ID de sesión del proveedor",rowMachine:"Máquina",rowConnection:"Conexión",rowCommand:"Comando",rowWorkingDirectory:"Directorio de trabajo",rowArgs:"Argumentos",rowExtraArgs:"Argumentos adicionales",rowExtraEnv:"Variables de entorno adicionales",rowNodeId:"ID de nodo",rowRepoRoot:"Raíz del repositorio",rowDaemonId:"ID de daemon",rowRole:"Rol",rowMachineStatus:"Estado de la máquina",rowHealth:"Estado de salud",rowWorktree:"Worktree",rowLaunchReady:"Listo para iniciar",rowGit:"Git",rowProviders:"Proveedores",rowProviderPriority:"Prioridad de proveedores",rowCoordinatorCli:"CLI del coordinador",rowStartedAt:"Iniciado a las",rowPromptInjection:"Inyección de prompt",rowMcpConfig:"Configuración de MCP",rowRuntimeId:"ID de runtime",rowLifecycle:"Ciclo de vida",rowSurface:"Superficie",rowRecoveryState:"Estado de recuperación",rowRestoredFromStorage:"Restaurado desde el almacenamiento",rowAttachedClients:"Clientes conectados"},I={mobile:{noHistoryMatches:"Ningún historial guardado coincide con estos filtros.",workspaceMissing:"(falta el espacio de trabajo)",resumableOnly:"Solo los que se pueden reanudar",sortMessages:"Más mensajes",sortOldest:"Más antiguos primero",sortRecent:"Más recientes",filterModel:"Filtrar por modelo",filterWorkspace:"Filtrar por espacio de trabajo",searchHistory:"Buscar por título o vista previa",useThisFolder:"Usar esta carpeta",browseDescription:"Navega por las carpetas como en un explorador y usa la carpeta actual para esta máquina.",browseTitle:"Seleccionar espacio de trabajo",machineDetails:"Detalles de la máquina",inspect:"Revisar",showMore:"Mostrar {{count}} más",showFewer:"Mostrar menos",recentLaunches:"Inicios recientes",currentChats:"Chats actuales",machineFallback:"máquina"},daemonUpdate:{previewUnknownDescription:"La app está conectada a la vista previa, pero el servidor aún no ha indicado la versión de destino.",previewUpToDateDescription:"Esta máquina ya ejecuta el daemon de vista previa actual.",previewUnknownTitle:"Estado de actualización de vista previa desconocido",previewUpToDateTitle:"El daemon de vista previa está actualizado",mismatchDescription:"Esta máquina ejecuta una versión del daemon distinta a la de la app. Actualízala antes de iniciar más sesiones.",previewUpgradeDescription:"Puedes actualizar esta máquina al daemon de vista previa actual sin abrir una shell remota.",requiredDescription:"Esta máquina tiene una versión del daemon incompatible. Actualízala antes de iniciar más sesiones.",mismatchTitle:"Se detectó una versión distinta",requiredTitle:"Es necesario actualizar el daemon",upgrade:"Actualizar",updateNow:"Actualizar ahora"},launchPick:{empty:"Aún no hay espacios guardados. Añade uno en la pestaña Espacio de trabajo o escribe una ruta arriba.",description:"No se da nada por hecho. Elige un espacio guardado, tu espacio predeterminado o la carpeta personal, o cancela y escribe una ruta.",title:"¿Dónde debe ejecutarse?"},trustBadge:{externalUntrustedHint:"Viene de una fuente que añadiste e incluye código que ADHDev ejecutará. Revisa la fuente antes de activarlo.",externalSafeHint:"Viene de una fuente que añadiste. Solo configuración: ADHDev nunca ejecuta código de ella.",trustedWithScriptsHint:"Proporcionado oficialmente por ADHDev. Incluye scripts que ADHDev ejecuta.",trustedHint:"Proporcionado oficialmente por ADHDev. Solo configuración: no se ejecuta código del proveedor.",userCustomHint:"Creaste este proveedor en tu carpeta de proveedores. Ejecuta tu propio código.",externalUntrusted:"Externo · ejecuta código",externalSafe:"Externo",trustedWithScripts:"Oficial · scripts",trusted:"Oficial",userCustom:"Personalizado"},providerSettings:{option:{high:"Alto",medium:"Medio",low:"Bajo"},notifications:{description:"Muestra notificaciones cuando {{provider}} cambia de estado.",label:"Notificaciones"},showCoordinatorSystemPrompt:{description:"Muestra el prompt del sistema inyectado como un mensaje en el chat. Desactivado por defecto: siempre puedes verlo en Información de sesión (ⓘ) de la cabecera del chat.",label:"Mostrar el mensaje del prompt del sistema"},showTerminal:{description:"Muestra los comandos de terminal y su salida en el chat.",label:"Mostrar terminal"},showToolCalls:{description:"Muestra resúmenes de las llamadas a herramientas (búsquedas, ediciones…) en el chat.",label:"Mostrar llamadas a herramientas"},showThinking:{description:"Muestra el razonamiento del agente en el chat.",label:"Mostrar razonamiento"},longGeneratingThresholdSec:{description:"Cuánto puede durar una respuesta antes de que salte el aviso.",label:"Umbral de tarea larga (segundos)"},longGeneratingAlert:{description:"Te avisa cuando una respuesta tarda más de lo normal.",label:"Aviso de tarea larga"},approvalAlert:{description:"Te avisa cuando {{provider}} espera tu aprobación.",label:"Avisos de aprobación"},appPathOverride:{description:"Ruta completa opcional a la aplicación del IDE. Déjala vacía para buscar en las ubicaciones habituales.",label:"Ruta de la aplicación"},cliPathOverride:{description:"Ruta completa opcional al lanzador de línea de comandos del IDE. Déjala vacía para usar el detectado.",label:"Ruta del lanzador CLI"},executableArgs:{description:"Argumentos opcionales que sustituyen a los predeterminados al iniciar {{provider}}. Déjalo vacío para usar los predeterminados.",label:"Argumentos de inicio"},executablePath:{description:"Ruta completa opcional al programa {{provider}}. Déjala vacía para buscarlo en tu PATH.",label:"Ruta del ejecutable"},autoApprove:{description:"Aprueba automáticamente las llamadas a herramientas y solicitudes de {{provider}} sin preguntarte.",label:"Aprobación automática"},enabled:{description:"Actívalo antes de que ADHDev detecte, inicie o compruebe {{provider}} en esta máquina.",label:"Activado en esta máquina"},thisProvider:"este proveedor"},launchConfirm:{workspace:"Espacio de trabajo",languageModel:"Modelo de lenguaje (opcional)",autoDetect:"Detección automática o predeterminado",cliArgs:"Argumentos de CLI (opcional)",cliArgsPlaceholder:"p. ej. --experimental",cancel:"Cancelar",closeAria:"Cerrar confirmación de inicio",launch:"Iniciar",launching:"Iniciando…"},confirmExternal:{aboutToActivateFrom:"Estás a punto de activar {{provider}} de {{source}}.",aboutToActivate:"Estás a punto de activar {{provider}}.",dialogAria:"Confirmar proveedor externo no confiable",title:"¿Activar proveedor externo no confiable?",description:"Este manifiesto incluye JavaScript que el daemon ejecutará. Trátalo como código no confiable — revisa la fuente antes de habilitarlo.",proceedWarning:"Continúa solo si confías en la URL de origen que añadiste y has revisado el manifiesto.",cancel:"Cancelar",activate:"Activar"},providers:{advancedHint:"Fuentes, rutas de carga y detalles del proveedor",filter:"Filtrar",sourceConfigTitle:"Configuración de origen de proveedores",sourceConfigDesc:"Dónde busca el daemon los manifiestos de proveedores. Afecta a la resolución y las recargas.",sourceMode:"Modo de origen",explicitProviderDir:"providerDir explícito",providerDirPlaceholder:"Dejar en blanco para usar ~/.adhdev/providers",applying:"Aplicando…",applyReload:"Aplicar + Recargar",userRoot:"Raíz de usuario:",upstreamRoot:"Raíz upstream:",providerRoots:"Raíces de proveedores:",loadingSettings:"Cargando configuración de proveedores…",noProviders:"Aún no hay proveedores instalados: usa Instalar arriba o añade una fuente en Avanzado.",noFilteredProviders:"No hay proveedores de {{filter}} instalados.",refresh:"Actualizar",updateAll:"Actualizar todo",advanced:"Avanzado",newChannelTypesTitle:"Disponibles para instalar",newChannelTypesDesc:"Publicados en el canal verificado pero no instalados en esta máquina. Instalar activa el paquete verificado por digest.",installNewType:"Instalar",modelListTitle:"Listas de modelos",modelListStaleDesc:"No se pudo leer la lista de modelos de estos CLI (sesión cerrada, sin conexión o salida no compatible). Se está usando la lista del manifiesto y puede estar desactualizada.",modelListStaleBadge:"sin verificar",installFailedTitle:"Error de instalación",installFailedDigestMismatch:"Error de instalación: inténtalo más tarde",loadFailed:"No se pudo cargar la configuración de proveedores: {{error}}",quotaToggleFailed:"No se pudo actualizar el sondeo de cuota para {{provider}}: {{error}}"},sourcesPanel:{title:"Fuentes externas",description:"URLs de git de terceros que has añadido. Los proveedores aquí pueden incluir JavaScript que el daemon ejecutará; la activación requiere confirmación.",addSource:"+ Añadir fuente",empty:'No hay fuentes externas registradas. Usa "+ Añadir fuente" para registrar una URL de git de un proveedor de terceros.',remove:"Eliminar",removing:"…",removeConfirmTitle:"¿Eliminar la fuente de proveedor {{name}}?",removeConfirmDescription:"Esto elimina los manifiestos clonados y borra cualquier entrada de fuente activa que apuntara aquí.",removeConfirmLabel:"Eliminar",conflictsTitle:"Conflictos",conflictsDescription:"Varias fuentes exponen el mismo tipo de proveedor. Elige qué copia de fuente debe estar activa.",active:"Activa",switchActiveTo:"Cambiar activa a {{name}}",addTitle:"Añadir fuente externa",gitUrl:"URL de git",ref:"Ref (rama/etiqueta)",name:"Nombre (opcional, derivado automáticamente de la URL)",cancel:"Cancelar",cloning:"Clonando…",cloneAndRegister:"Clonar + registrar",loadFailed:"No se pudieron cargar las fuentes",addFailed:"No se pudo añadir la fuente",removeFailed:"No se pudo eliminar la fuente",setActiveFailed:"No se pudo establecer la fuente activa"},providerRow:{detectDisabledHint:"Activa el proveedor antes de comprobarlo",detectHint:"Comprueba que el programa configurado se encuentra y se puede ejecutar",lifecycleDeprecated:"Sin soporte",lifecycleExperimental:"Experimental",lifecycleBeta:"Beta",lifecycleStable:"Estable",checkFailed:"Error",checkOk:"Correcto",statusDetected:"Detectado",statusNotDetected:"No detectado",statusEnabledUnchecked:"Habilitado (sin comprobar)",statusDisabled:"Deshabilitado",labelType:"Tipo:",labelVersion:"Versión:",labelBinary:"Binario:",labelStatus:"Estado:",labelDetails:"Detalles:",labelSource:"Origen:",labelTrust:"Confianza:",labelLinks:"Enlaces:",labelDetection:"Detección:",labelVerification:"Verificación:",saving:"guardando…",disable:"Deshabilitar",enable:"Habilitar",detect:"Detectar",resetCommand:"Restablecer comando",quotaAccountLabel:"Mostrar la cuenta en la cuota",quotaAccountLabelHint:"Etiqueta la cuota de este proveedor con la cuenta con sesión iniciada. Desactivado significa que la cuenta nunca se consulta, no solo que se oculta.",quotaAccountLabelOn:"Activado",quotaAccountLabelOff:"Desactivado",quotaTracking:"Seguimiento de cuota",quotaTrackingHint:"Lee periódicamente la cuota del plan de este proveedor para los paneles. Desactivado detiene las lecturas por completo.",quotaTrackingOn:"Activado",quotaTrackingOff:"Desactivado",quotaClaudeConfirmTitle:"¿Activar el seguimiento de cuota de Claude?",quotaClaudeConfirmBody:"Claude Code no tiene una API de cuota, así que ADHDev lee el uso a través de su statusLine, la única vía disponible. Al activarlo, el comando statusLine de ~/.claude/settings.json se reemplaza por el wrapper de ADHDev. Tu comando actual sigue ejecutándose dentro del wrapper y su salida se transmite sin cambios, por lo que el prompt se ve igual. No se modifica ninguna otra configuración del archivo. El valor actual se respalda primero y se puede restaurar con `adhdev quota claude:uninstall`.",quotaClaudeConfirmOk:"Instalar y activar",quotaClaudeConfirmCancel:"Cancelar",labelSpecPin:"Pin de spec:",labelActivatedAt:"Activado:",labelPreviousPin:"Pin anterior:",labelDigest:"Digest:",specPinStale:"actualizar {{latest}}",specPinStaleHint:"Esta máquina carga una spec antigua. El canal ofrece {{latest}}.",updateInline:"Actualizar",updateInlineHint:"El canal ofrece {{latest}}. Descárgalo, verifícalo y actívalo en esta máquina.",specPinUpdating:"Actualizando…",specPinRollback:"Revertir",specPinRollbackHint:"Volver a la spec {{version}} (local, sin descarga).",specPinRollingBack:"Revirtiendo…"},installOptions:{title:"Configurar {{provider}}",quotaLabel:"Seguir el uso del plan",quotaHint:"Lee periódicamente la cuota del plan de este proveedor para que los paneles y `adhdev quota` muestren lo que queda. Al desactivarlo se detienen las lecturas por completo: no se recopila nada.",quotaClaudeNote:"Claude Code no tiene API de cuota, así que esto instala el envoltorio statusLine de ADHDev en ~/.claude/settings.json. Tu comando actual sigue ejecutándose dentro y se hace una copia de seguridad del original.",autoApproveLabel:"Aprobar llamadas a herramientas automáticamente",autoApproveHint:"Cuando este agente pida permiso para ejecutar un comando, editar un archivo o usar una herramienta, ADHDev responderá que sí por ti. No verás el aviso de aprobación y la acción se ejecutará sin esperar.",autoApproveWarning:"El agente puede ejecutar comandos en esta máquina sin preguntarte antes. Desactívalo para aprobar cada uno tú mismo.",cancel:"Cancelar",confirm:"Activar proveedor"},card:{status:{offline:"Sin conexión",failed:"Error de conexión",connecting:"Conectando…",online:"En línea"},slowLink:"Enlace lento",coresCount_other:"{{count}} núcleos",coresCount_one:"{{count}} núcleo",onMachine:"en {{machine}}",sectionIDEs:"IDE",sectionCLIs:"CLI",cpu:"CPU",mem:"MEM",loading:"Cargando tus máquinas…",emptyHeadline:"Te damos la bienvenida a ADHDev",emptyBody:"Conecta tu primera máquina al panel. Instala ADHDev en esa máquina e inicia sesión: se emparejará automáticamente y aparecerá aquí:",emptyDocsLink:"Leer la documentación →",hidden:"Oculto",pageTitle:"Máquinas",burrowCount_one:"{{count}} máquina",burrowCount_other:"{{count}} máquinas",onlineCount_one:"{{count}} en línea",onlineCount_other:"{{count}} en línea",agentsActive_one:"{{count}} agente activo",agentsActive_other:"{{count}} agentes activos",activeNow:"Activo ahora",generating:"generando",connectionFailed:"Error de conexión",reconnect:"Reconectar",transportRelay:"Conectado a través de un servidor de retransmisión: más lento que un enlace directo. Suele deberse a un firewall o NAT que bloquea la ruta directa.",transportDirect:"Conexión directa",noAgentsRunning:"Aún no hay agentes en ejecución",launchCta:"Iniciar →"},detail:{relaunchFailed:"No se pudo volver a iniciar",launchProvider:"Proveedor",launchType:"Tipo",tabsAriaLabel:"Secciones de la máquina",tabSessions:"Sesiones",notFound:"Máquina no encontrada",save:"Guardar",cancel:"Cancelar",loading:"Cargando máquina...",offlineHint:"Es posible que la máquina esté desconectada o aún no se haya conectado.",back:"← Volver",tabHostedRuntimes:"Runtimes alojados",tabProviders:"Proveedores",tabSystem:"Sistema",tabLogs:"Registros",clickToSetNickname:"Haz clic para establecer un alias",nicknamePlaceholder:"Alias de la máquina...",reconnect:"Reconectar",p2pConnected:"conectado",providerUpdatesAvailable:"Hay actualizaciones de proveedores",providerSyncSuccess:"Canal de proveedores sincronizado — {{count}} actualizados",providerSyncAlreadyCurrent:"El canal de proveedores ya está al día",providerSyncFailed:"Error al actualizar el proveedor"},commandCenter:{updateStatusUnknown:"Estado de actualización desconocido",upToDate:"Actualizado",updateDaemon:"Actualizar daemon",updateToVersion:"Actualizar a v{{version}}",updateChannel:{preview:"vista previa",stable:"estable"},updateTargetWithChannel:"Destino: v{{version}} ({{channel}})",updateTarget:"Destino: v{{version}}",currentChats:"Chats actuales",recentLaunches:"Inicios recientes",daemonUpdate:"Actualización del daemon"},workspaceBrowse:{currentFolder:"Carpeta actual",parent:"Superior",go:"Ir",pathPlaceholder:"Escribe la ruta de una carpeta",loading:"Cargando carpetas…",noSubfolders:"No hay subcarpetas.",useThisFolder:"Usar esta carpeta"},managedWorkspaces:{setDefaultHint:"Establecer como espacio predeterminado",unsetDefaultHint:"Espacio predeterminado: haz clic para quitarlo",title:"Workspaces",addWorkspace:"Añadir workspace",empty:'Aún no hay workspaces guardados. Pulsa "{{button}}" para elegir una carpeta.',addDialogDescription:"Explora la máquina como en un explorador normal y añade la carpeta actual como workspace.",remove:"Eliminar",newSession:"Iniciar una nueva sesión en este workspace",newSessionShort:"Sesión",newMeshSession:"Iniciar una sesión de coordinador de mesh en este workspace",newMeshSessionShort:"Mesh",removeConfirmTitle:"Eliminar workspace",removeConfirmDescription:'¿Eliminar "{{label}}" de la lista? La carpeta en sí no se elimina.',rename:"Renombrar",renamePlaceholder:"Nombre del workspace",saveName:"Guardar",cancelRename:"Cancelar",renameFailed:"No se pudo actualizar el nombre del workspace"},overview:{diagnostics:"Diagnóstico",p2p:"P2P",daemonVersion:"Versión del daemon",cores:"Núcleos de CPU",platform:"Plataforma",hostname:"Nombre de host",aboutMachine:"Esta máquina",approx:"(aprox.)",memory:"Memoria",cpuDetail:"{{load}} media / {{cores}} núcleos",cpuLoad:"Carga de CPU",resourceUsage:"Uso de recursos",waiting:"Esperando…",uptime:"Tiempo activo",waitingForStats:"Esperando estadísticas en vivo…",waitingForStatsWithTotal:"Esperando estadísticas en vivo… · {{total}} en total"},fleetQuota:{title:"Cuota de suscripción por máquina",subtitle:"Cuánto queda de la ventana de 5 horas y la semanal de cada suscripción en cada máquina. La cola de tareas salta los planes casi agotados y gasta primero la cuota que caducaría sin usar.",machine:"Máquina",unreadable:"no legible"},quota:{text:{failureKind:{unknown:"error desconocido","no-data":"aún sin lectura","setup-required":"requiere configuración",unsupported:"no compatible","cli-unavailable":"programa no encontrado",parse:"respuesta ilegible",server:"error del servidor del proveedor",network:"error de red","rate-limited":"límite de peticiones","quota-exhausted":"límite del plan alcanzado",unauthorized:"acceso denegado","expired-token":"sesión caducada","missing-credentials":"sin sesión iniciada"},agoDays:"hace {{days}} d {{hours}} h",agoHours:"hace {{hours}} h {{minutes}} min",agoMinutes:"hace {{minutes}} min",justNow:"ahora mismo",unreadable:"no se pudo leer la cuota",unavailable:"no disponible en esta máquina",pool:"grupo",usageSessions:"{{count}} ses.",usageTokens:"{{count}} tokens",windowReset:"reiniciado · esperando actualización",cue:{stale:"desactualizado",refreshing:"actualizando"},resetsInDays:"se reinicia en {{days}} d {{hours}} h",resetsInHours:"se reinicia en {{hours}} h {{minutes}} min",resetsInMinutes:"se reinicia en {{minutes}} min",resetsNow:"se reinicia ahora",used:"{{percent}}% usado"},title:"Cuota del plan",sessionHint:"Ventana móvil de 5 horas del plan reportada por esta máquina",weeklyHint:"Ventana móvil de 7 días del plan reportada por esta máquina",monthlyHint:"Ventana de facturación de 30 días reportada por esta máquina",bucketHint:"Cubo de cuota por grupo reportado por esta máquina — los grupos de un plan se restablecen de forma independiente",failureHint:"Esta máquina informó que no pudo leer la cuota de este proveedor",okNoWindows:"Sin límite",okNoWindowsHint:"La lectura de cuota tuvo éxito; este proveedor no reporta una ventana porcentual (p. ej., planes de uso incluido).",accountHint:"La cuenta con la sesión iniciada a la que pertenece esta cuota, según reporta la CLI del proveedor",usageHint:"Uso absoluto en la ventana reciente: este provider enruta a tus propias cuentas upstream, así que no hay límite de plan para mostrar un porcentaje."},actions:{nicknameSyncFailed:"Apodo actualizado en la máquina, pero falló la sincronización con la cuenta",nicknameFailed:"No se pudo guardar el apodo",nicknameTimeout:"La máquina no respondió — comprueba su conexión e inténtalo de nuevo",nicknameSaved:"Apodo guardado",pathMissing:"Es posible que la ruta no exista en el disco",workspaceActionFailed:"Error al actualizar el espacio de trabajo",workspaceAdded:"Espacio de trabajo añadido",detectFailed:"Error al detectar IDEs",usingDefaultWorkspace:"Usando el espacio de trabajo predeterminado",runningInHome:"Ejecutando en el directorio personal",launchPending:"{{name}} se está iniciando; aparecerá en breve",launchFailed:"No se pudo iniciar {{name}}",launching:"Iniciando {{name}}…",stopCliConfirmDescription:"Esto terminará el proceso.",stopIdeConfirmDescription:"Esto desconectará CDP y, si procede, finalizará el proceso.",stopped:"{{name}} detenido",launched:"{{name}} lanzado",stopFailed:"No se pudo detener",restartInitiated:"Reinicio de {{name}} iniciado",restartFailed:"No se pudo reiniciar",selectProviderFirst:"Selecciona primero un proveedor CLI",selectProvider:"Selecciona un proveedor",workspaceRemoved:"Workspace eliminado",workspaceLabelUpdated:"Nombre del workspace actualizado",defaultWorkspaceUpdated:"Workspace predeterminado actualizado",defaultWorkspaceCleared:"Workspace predeterminado borrado",idesFound_one:"Se encontró {{count}} IDE",idesFound_other:"Se encontraron {{count}} IDE"},logsTabSections:{view:"Vista",filterInfo:"Info+ ({{count}})",filterIssues:"Problemas ({{count}})",filterAll:"Todo ({{count}})",searchPlaceholder:"Buscar diagnósticos…",copyDiagnostics:"Copiar diagnósticos",copyVisible:"Copiar visibles",pause:"Pausar",resume:"Reanudar",refresh:"↻ Actualizar",clear:"Limpiar",advancedSourceScope:"Alcance avanzado de fuente",daemonLevelPlus:"Demonio {{level}}+",diagnosticsTimeline:"Cronología de diagnósticos",visibleEventsIssues:"{{events}} evento(s) visible(s) · {{issues}} señal(es) de problema",filteredBy:"Filtrado por “{{query}}”",mergedByTime:"Señales de daemon, trace y navegador combinadas por tiempo",latestIssue:"Último problema",noVisibleIssue:"No hay señal de warn/error visible",sourceStatus:"Estado de la fuente",needsAttention:"Requiere atención",livePolling:"Sondeo en vivo cada 3s",paused:"Pausado",lastUpdate:"Última actualización: {{time}}",notYetLoaded:"Aún no cargado",rawFile:"archivo sin procesar",sourceDaemon:"demonio",sourceTrace:"traza",sourceBrowser:"navegador",repeatedIssuePatterns:"Patrones de problemas repetidos",unifiedTimeline:"Cronología unificada",visibleDiagnosticEvents:"{{count}} evento(s) de diagnóstico visible(s)",hide:"Ocultar",show:"Mostrar",loadingDiagnostics:"Cargando diagnósticos…",daemonLogsError:"Logs del daemon: {{error}}",daemonTraceError:"Trace del daemon: {{error}}",noDiagnosticsMatch:"Ningún diagnóstico coincide con la vista actual.",rawSourceDaemonLogs:"Fuente sin procesar · logs del daemon",visibleRawLinesFallback:"{{count}} línea(s) sin procesar visible(s) desde el fallback de archivo",visibleStructuredLines:"{{count}} línea(s) estructurada(s) visible(s)",loadingDaemonLogs:"Cargando logs del daemon…",noDaemonLogsYet:"Aún no se han capturado logs del daemon en esta máquina.",noRawLinesMatchSearch:"Ninguna línea de log sin procesar del daemon coincide con la búsqueda actual.",rawFallbackOnlyInAll:"Los logs de fallback de archivo sin procesar solo están disponibles en la vista Todo.",noStructuredLogsMatch:"Ningún log estructurado del daemon coincide con la vista actual.",rawSourceDaemonTrace:"Fuente sin procesar · trace del daemon",sessionHostOnly:"solo session_host",visibleTraceEvents:"{{count}} evento(s) de trace visible(s)",loadingDaemonTrace:"Cargando trace del daemon…",noTraceEntriesMatchSearch:"Ninguna entrada de trace coincide con la búsqueda actual.",noSessionHostTraceYet:"Aún no hay entradas de trace de session host.",noTraceEntriesYet:"Aún no hay entradas de trace.",noPayload:"Sin payload",rawSourceBrowserEvents:"Fuente sin procesar · eventos de depuración del navegador",visibleBrowserEvents:"{{count}} evento(s) de navegador visible(s)",noBrowserEventsMatchSearch:"Ningún evento de depuración del navegador coincide con la búsqueda actual.",noBrowserEventsYet:"Aún no se han capturado eventos de depuración del navegador."}},R={transition:{recover:"Recuperada",detach:"Desconectada",attach:"Conectada",start:"Iniciada",stop:"Detenida",restart:"Reiniciada",resume:"Reanudada"},lastErrorLabel:"Último error",endpointLabel:"Endpoint",activeAgo:"activo {{time}}",title:"Recuperación de runtimes alojados",stopConfirmTitle:"¿Detener {{name}}?",stopConfirmDescription:"Esto terminará el runtime alojado.",pruneConfirmTitle:"¿Depurar runtimes alojados duplicados?",pruneConfirmDescription:"Se conservará el runtime más reciente de cada sesión de proveedor; los duplicados antiguos se detendrán y eliminarán.",prune:"Depurar",pruning:"Depurando…",pruneDuplicatesCount:"Depurar duplicados ({{count}})",toastResumed:"Session host reanudado: {{name}}",toastRestarted:"Session host reiniciado: {{name}}",toastStopped:"Session host detenido: {{name}}",toastPruned:"Se depuraron {{pruned}} runtime(s) duplicados en {{groups}} grupo(s)",actionFailed:"Falló la acción del session host",pruneFailed:"Falló la depuración de duplicados",diagnosticsFailed:"No se pudieron cargar los diagnósticos del runtime alojado",diagnosticsAttention:"Los diagnósticos del runtime alojado requieren atención",stop:"Detener",stopping:"Deteniendo…",restart:"Reiniciar",restarting:"Reiniciando…",resume:"Reanudar",resuming:"Reanudando…",recover:"Recuperar",recovering:"Recuperando…",refresh:"Actualizar",refreshing:"Actualizando…",noWorkspace:"Sin workspace",clientsCount_one:"{{count}} cliente",clientsCount_other:"{{count}} clientes",statLive:"Runtimes activos",statRecovery:"Recuperación",statRequests:"Solicitudes",statStarted:"Inicio",latestWarning:"Última advertencia del host",liveTitle:"Runtimes alojados activos",recoveryTitle:"Instantáneas de recuperación",inactiveTitle:"Registros inactivos",recentActivity:"Actividad reciente del host",liveEmpty:"No hay runtimes alojados activos en esta máquina ahora mismo.",recoveryEmpty:"Ninguna instantánea de recuperación requiere atención ahora.",transitionsEmpty:"Aún no hay transiciones recientes de runtime.",nextAction:"Siguiente: {{action}}"},j={managed:"Gestionado",checking:"Comprobando…",diagnosticsIssue:"Problema de diagnóstico",unavailable:"No disponible",restoredAfterRestart:"restaurado tras el reinicio",restoreFailed:"fallo al restaurar",hostRestartInterrupted:"reinicio del host interrumpido",snapshotRecovered:"snapshot recuperado",attach:"Adjuntar",recover:"Recuperar",restart:"Reiniciar",hintLive:"Estos runtimes están activos ahora y son los únicos objetivos a los que se puede adjuntar.",hintRecovery:"Estos registros se restauraron desde el estado de session-host y no son objetivos de adjunto en vivo hasta que los recuperes o reinicies explícitamente.",hintInactive:"Estos registros inactivos se muestran como referencia y normalmente necesitan reiniciarse antes de volver a ser útiles.",lifecycleStarting:"Iniciando",lifecycleRunning:"En ejecución",lifecycleStopping:"Deteniendo",lifecycleStopped:"Detenido",lifecycleFailed:"Fallido",lifecycleInterrupted:"Interrumpido"},M={advancedTitle:"Avanzado",mobileMode:{workspaceMode:"Espacio de trabajo",chatMode:"Modo chat",descriptionWorkspace:"Usa el diseño completo de espacio de trabajo en móviles y tabletas.",descriptionChat:"Usa el diseño de bandeja móvil centrado en el chat, más parecido a una app de mensajería.",label:"Bandeja móvil (modo chat)"},theme:{preset:{honey:"Acentos amarillos cálidos",aurora:"Tema con acento rosa",ember:"Tema ámbar predeterminado, inspirado en la página principal",midnight:"Tema violeta clásico"},presetCustomDescription:"Personalización completa de app y chat",helloHelp:"¡Hola! ¿En qué puedo ayudarte?",fixBug:"Corrige el error, por favor",onIt:"¡Enseguida! ✨",customEditorTitle:"Editor de tema personalizado",darkMode:"Modo oscuro",lightMode:"Modo claro",sectionAppBackground:"Fondo de la aplicación",sectionAppText:"Texto de la aplicación",sectionBordersAccent:"Bordes y acento",sectionChatBubbles:"Burbujas de chat",sectionChatLayout:"Diseño del chat",colorBackground:"Fondo",colorSurface:"Superficie",colorCard:"Tarjeta",colorPrimary:"Primario",colorSecondary:"Secundario",colorMuted:"Atenuado",colorBorderSubtle:"Borde sutil",colorBorderDefault:"Borde predeterminado",colorAccent:"Acento",colorUserBubble:"Burbuja del usuario",colorUserText:"Texto del usuario",colorAgentBubble:"Burbuja del agente",colorAgentText:"Texto del agente",colorChatBg:"Fondo del chat",colorSendButton:"Botón de enviar",colorInputBorder:"Borde del campo de entrada",labelBubbleRadius:"Radio de la burbuja",resetToDefaults:"Restablecer valores predeterminados",customLabel:"Personalizado"},providerPriority:{undetectedHint_other:"{{count}} proveedores no se detectan aquí: se mantienen en el orden y se omiten hasta que estén disponibles.",undetectedHint_one:"{{count}} proveedor no se detecta aquí: se mantiene en el orden y se omite hasta que esté disponible.",orderHint:"Los inicios usan este orden, de arriba abajo.",noMoreProviders:"No se detectaron otros proveedores CLI",selectProvider:"Seleccionar proveedor…",moveDown:"Bajar",moveUp:"Subir",keptUntilDetected:"Se mantiene en el orden; se omite al iniciar hasta que se detecte en esta máquina.",emptyWarning:"No hay orden de proveedores. Los inicios que no indiquen un proveedor CLI se rechazarán.",available:"disponible",notOnMachine:"No detectado",remove:"Eliminar",addCliLabel:"Añadir proveedor CLI disponible",addProvider:"Añadir proveedor"},coordinatorPrompts:{saveFailed:"No se pudo guardar",loadFailed:"No se pudieron cargar los prompts del coordinador",save:"Guardar",saved:"Guardado",saving:"Guardando…",appendPlaceholder:"(vacío: no se añade nada en esta capa)",overridePlaceholder:"(vacío: usar el prompt base predeterminado)",placeholdersHint:"Marcadores que puedes usar:",resetHint:"Deja un campo vacío y guarda para quitarlo (vuelve al predeterminado).",intro:"Personaliza el prompt que reciben las sesiones de coordinador de mesh de este daemon.",loading:"Cargando…",connectDaemon:"Conecta un daemon para editar los prompts del coordinador.",overrideDesc:"<strong>Override</strong> reemplaza el prompt base integrado del daemon para esa CLI.",appendDesc:"<strong>Append</strong> se apila después de la base que prevalezca.",overrideLabel:"Sustituir",appendLabel:"Añadir",expandLabel:"Editar prompts",collapseLabel:"Contraer",customizedBadge:"Personalizado",collapsedNone:"Sin prompts personalizados — se usan los valores por defecto del daemon.",tabsAriaLabel:"Proveedor de prompts del coordinador",sectionTitle:"Prompts del coordinador",sectionDescription:"Prompt base por CLI para las sesiones del coordinador de malla en esta máquina. Los prompts a nivel de malla están en la página Repo Mesh."},appearance:{modeSystem:"Sistema",modeLight:"Claro",modeDark:"Oscuro",modeLabel:"Modo",themeLabel:"Tema",mobileLabel:"Móvil",chatLabel:"Chat"},chatActivity:{rowLabel:"Mostrar actividad del agente en el chat",descriptionOn:"Las llamadas a herramientas, la salida del terminal y el razonamiento se muestran entre los mensajes.",descriptionOff:"Solo se muestra la conversación. Las llamadas a herramientas, la salida del terminal y el razonamiento permanecen ocultos."}},N={chatHistory:"Historial de chat",startNewChat:"+ Iniciar nueva sesión de chat",creating:"Creando...",searchPlaceholder:"Buscar por título o vista previa",filterWorkspace:"Filtrar por espacio de trabajo",filterModel:"Filtrar por modelo",sortRecent:"Más recientes",sortOldest:"Más antiguos primero",sortMessages:"Más mensajes",resumeReadyOnly:"Solo listos para reanudar",untitledSession:"Sesión sin título",noSavedPreview:"Aún no hay vista previa guardada",workspaceUnknown:"Espacio de trabajo desconocido",selectedWorkspaceSuffix:" · espacio de trabajo seleccionado",msgCount:"{{count}} mensajes",statusActive:"ACTIVA",statusMissingWorkspace:"FALTA EL ESPACIO DE TRABAJO",statusResumeSelectedWorkspace:"REANUDAR EN EL ESPACIO DE TRABAJO SELECCIONADO",statusResuming:"REANUDANDO...",statusResume:"REANUDAR",noMatchingHistory:"Ningún historial guardado coincide con estos filtros.",noRecentChats:"No se encontraron sesiones de chat recientes.",refreshHistory:"Actualizar historial",refreshing:"Actualizando...",confirmSwitchTitle:"¿Cambiar de sesión?",confirmSwitchDescription:'¿Cambiar a "{{target}}"? Esto abandonará la vista actual.',confirmSwitchAction:"Cambiar"},z={gallery:{next:"Vista siguiente",previous:"Vista anterior",slides:{overview:"Misiones y actividad, desde el móvil",tasks:"Cola de tareas de todos los workers",map:"Mapa en vivo de nodos y ramas",desktop:"El mismo mesh, en el escritorio"}},theme:{system:"Tema del sistema",light:"Tema claro",dark:"Tema oscuro"},nav:{home:"Inicio de ADHDev",mesh:"Mesh",what:"Qué es",agents:"Agentes",pricing:"Precios",install:"Instalar",github:"GitHub",docs:"Documentación",getStarted:"Comenzar",toggleMenu:"Alternar menú",mainNavigation:"Navegación principal"},hero:{badge:"Claude Code, Codex, Cursor y más, en todas tus máquinas",title:"El plano de control para tus agentes de programación.",subtitleInstall:"Instala ADHDev en tu <os></os>.",subtitlePlace:"usa tu <device></device>",subtitleAsk:"para pedirle a <coordinator></coordinator> que envíe a <worker></worker> a <verb></verb> tu repositorio.",subtitleFrom:"Desde <place></place>,",anywhere:"cualquier lugar",subtitleLand:"Todos los agentes de todas tus máquinas en una vista, una cola de tareas compartida, y solo llega a main el trabajo que pasa tus tests.",axes:{os:["Mac","Windows","Linux"],place:["el metro","una cafetería","la casa de tus padres","la cama","el sofá","el jardín","el asiento del copiloto","el ferry","el gimnasio","dentro de un contenedor","la luna","un rack de servidores"],device:["ordenador de escritorio","portátil","tablet","móvil"],verb:["depurar","compilar","probar","revisar"]},copyInstall:"Copiar comando de instalación: {{cmd}}",copied:"Copiado",copy:"Copiar",getStarted:"Comenzar",orInstall:"O instala la CLI",openSource:"Código abierto en GitHub",joinDiscord:"Unirse a Discord",selfHost:"Autoaloja si quieres",demoDesktop:"Centro de mando de ADHDev controlando sesiones de agentes en vivo en varias máquinas",demoPush:"Notificación push móvil de ADHDev y aprobación con un toque"},mesh:{sectionTitle:"Agentes en paralelo que no se pisan entre sí.",sectionSubtitle:"Lanzar agentes en paralelo es la parte fácil: ahora lo hace cualquier herramienta. Lo difícil es lo que viene después: diez ramas que todavía hay que verificar y fusionar. Refinery lo hace por ti, de forma desatendida, para que el trabajo terminado llegue a main en lugar de a tu cola de revisión.",refineryHighlight:"Refinery",refineryTitle:"El trabajo terminado aterriza en main, de forma desatendida",refineryDesc:"Cualquiera puede lanzar diez agentes en paralelo. Refinery valida cada worktree contra las propias comprobaciones de tu repositorio (typecheck, tests, lint), verifica la equivalencia de parches, publica los commits de submódulos, hace rebase y fusiona en main solo si no se ha movido, y limpia, todo automáticamente. Nunca force-push. Cualquier cosa ambigua se devuelve para revisión en lugar de fusionarse.",asyncHighlight:"Orquestación asíncrona",asyncTitle:"Hablas con un solo lugar. Él ejecuta el resto.",asyncDesc:"Le das trabajo a un solo coordinador; este dirige a muchos trabajadores en muchas máquinas sobre un bucle de eventos, reaccionando solo cuando llega un evento de finalización, aprobación o estado. Sin sondeo, sin una ventana por agente que vigilar. A diferencia de una aplicación de escritorio donde observas cada sesión de agente, aquí el coordinador espera eventos, así que no tienes que estar sentado de forma síncrona frente a nada.",crossPlatformHighlight:"Multiplataforma por defecto",crossPlatformTitle:"Mac, Windows, Linux — todos a la vez",crossPlatformDesc:"Enruta tareas a nodos de SO específicos con una sola etiqueta (os=darwin, os=win32, os=linux). Un solo prompt despacha compilaciones, pruebas o verificaciones multiplataforma en paralelo en las máquinas heterogéneas que ya tienes. Sin configuración SSH ni máquinas virtuales — solo los daemons que ya tienes conectados.",monoHighlight:"Con soporte para monorepo",monoTitle:"Seguro incluso con submódulos de git",monoDesc:"Los repositorios de producción reales anidan submódulos, y ahí es justo donde falla la fusión automática ingenua. Refinery reconoce los submódulos: condiciona la fusión a la accesibilidad de los commits de submódulos, juzga la equivalencia de parches y actualiza el puntero de forma atómica. Este proyecto es en sí mismo un monorepo con una raíz y dos submódulos, convergido de esta manera cada día.",crossHighlight:"Verificación cruzada",crossTitle:"Consenso por encima de una sola opinión",crossSubtitle:"Una pregunta, varios agentes independientes",crossDesc:"El coordinador envía la misma pregunta de solo lectura a varias máquinas y modelos a la vez y compara dónde coinciden y dónde divergen. Más fiable que la opinión de un solo agente.",tryMesh:"Probar Repo Mesh →",seePlans:"Ver planes",availableOn:"Conecta una máquina y abre la página de <strong>Repo Mesh</strong> para empezar.",readGuide:"Leer la guía"},compare:{sectionTitle:"Los agentes en paralelo están por todas partes. Evitar que se pisen es otra historia.",sectionSubtitle:"Las CLI locales lanzan subagentes; los orquestadores de escritorio distribuyen el trabajo por worktrees con una interfaz nativa. Ambos se detienen en la rama: revisar y fusionar queda en tus manos. Aquí tienes la comparación, incluido cuándo encaja mejor cada uno.",colLocalCli:"CLI local + subagentes",colDesktop:"Orquestador de escritorio",colAdhdev:"ADHDev Repo Mesh",rowLandsMain:"Aterriza el trabajo terminado en main",rowLandsMainLocalCli:"Ejecutas las comprobaciones y fusionas a mano",rowLandsMainDesktop:"Paraleliza el trabajo y luego te entrega las ramas para revisar",rowLandsMainAdhdev:"Refinery ejecuta las comprobaciones de tu repositorio, verifica la equivalencia de parches y hace rebase y fusiona en main solo si no se ha movido, de forma desatendida y sin force-push",rowSubmodules:"Seguro con submódulos de git",rowSubmodulesLocalCli:"Sin automatización de fusión que los reconozca",rowSubmodulesDesktop:"Paralelismo por worktree, pero la fusión corre por tu cuenta",rowSubmodulesAdhdev:"Convergencia con reconocimiento de submódulos: filtro de accesibilidad, comprobación de equivalencia de parches, actualización atómica del puntero —probado a diario en este monorepo",rowAsync:"Habla con un solo lugar, de forma asíncrona",rowAsyncLocalCli:"Una sesión a la vez, de forma síncrona",rowAsyncDesktop:"Tú mismo supervisas cada ventana de agente",rowAsyncAdhdev:"Un coordinador dirige a cada trabajador sobre un bucle de eventos: espera eventos de finalización/aprobación, tú no sondeas ni vigilas",rowMultiMachine:"Varias máquinas físicas",rowMultiMachineLocalCli:"Solo los procesos de un host",rowMultiMachineDesktop:"Atado a la única máquina en la que se ejecuta",rowMultiMachineAdhdev:"Daemons remotos vía P2P — nodos Mac, Windows y Linux en una malla, sin configuración SSH",rowParallelBranch:"Trabajo en paralelo en ramas aisladas",rowParallelBranchLocalCli:"Los subagentes comparten un mismo árbol de trabajo: las escrituras concurrentes chocan",rowParallelBranchDesktop:"Un git worktree por tarea: una fortaleza central",rowParallelBranchAdhdev:"Un git worktree por nodo: en paralelo entre máquinas, no solo entre núcleos",rowBrowser:"Contrólalo desde un navegador o teléfono",rowBrowserLocalCli:"Tienes que estar en la terminal",rowBrowserDesktop:"Aplicación de escritorio nativa: estás en ese escritorio",rowBrowserAdhdev:"Prioridad web: controla sesiones y aprueba desde cualquier navegador o teléfono",rowNativeApp:"Aplicación de escritorio nativa",rowNativeAppLocalCli:"Solo terminal",rowNativeAppDesktop:"Ventana nativa pulida: genuinamente más agradable de usar",rowNativeAppAdhdev:"Somos de prioridad web: una pestaña del navegador, no una aplicación nativa",rowRestarts:"Sobrevive a reinicios y pérdida de contexto",rowRestartsLocalCli:"El estado vive en una sesión: ciérrala y desaparece",rowRestartsDesktop:"El estado está ligado al proceso de la aplicación",rowRestartsAdhdev:"Las misiones persisten en disco y se reanudan tras el reinicio de un coordinador o daemon: registro de auditoría de solo anexión",rowCrossCheck:"Verifica la respuesta de forma cruzada",rowCrossCheckLocalCli:"La opinión de un solo agente, sin una segunda opinión",rowCrossCheckDesktop:"Trabajo en paralelo, un único veredicto",rowCrossCheckAdhdev:"El coordinador envía la misma pregunta de solo lectura a agentes de distintas máquinas × proveedores y compara dónde divergen",footnote:"Para una sola máquina, una sola rama, una tarea puntual, una CLI local con subagentes es más ligera y funciona de maravilla, y un orquestador de escritorio nativo es un lugar más agradable para trabajar. Repo Mesh se gana su lugar cuando el trabajo se distribuye entre máquinas y ramas, necesita sobrevivir a reinicios y debe aterrizar en main automáticamente, controlado desde donde estés."},what:{sectionTitle:"Cualquier agente, mezclado libremente",sectionSubtitle:"Neutral respecto al proveedor por diseño. Ejecuta Claude Code en el Mac, Codex en la máquina GPU con Windows, Cursor CLI para las pasadas de revisión, todo en el mismo mesh y desde el mismo panel. Cambia de proveedor sin cambiar de plataforma.",cliHighlight:"Agentes CLI",cliTitle:"Controla cualquier agente de terminal desde la web",cliDesc:"Claude Code, Codex CLI, Cursor CLI, Antigravity CLI, Grok, Kimi y OpenCode: se ejecutan en tu máquina mediante un adaptador PTY con reanudación y reconexión adecuadas, controlados desde tu navegador. Envía prompts y aporta contexto visual al instante (pega, arrastra y suelta, o sube varias imágenes a la vez).",uiHighlight:"Una sola UI",uiTitle:"El mismo panel, cualquier dispositivo",uiDesc:"Alojado en la nube en adhf.dev: controla cada agente desde una laptop o un teléfono, ya sea en tu escritorio o lejos de él.",ideHighlight:"Agentes IDE",ideTitle:"Además: conéctate a editores en ejecución",ideDesc:"Cursor, VS Code, VSCodium, Windsurf, Antigravity, Kiro, PearAI, Trae. Lee el chat en vivo, envía prompts, cambia de sesión, captura pantallas.",p2pHighlight:"Tuyo, de extremo a extremo",p2pTitle:"Prioridad P2P: tus datos siguen siendo tuyos",p2pDesc:"El chat, los comandos y las capturas de pantalla fluyen directamente entre tu navegador y tu daemon a través de WebRTC: tu código nunca pasa por el servidor. La nube se encarga del inicio de sesión, el establecimiento de la conexión y el estado de las sesiones. La única excepción: las notificaciones push de aprobación incluyen hasta 80 caracteres de lo que estás aprobando."},oss:{sectionTitle:"Código abierto y autoalojable",sectionSubtitle:"El daemon y el panel son AGPL-3.0 y están disponibles en GitHub. Ejecútalos tú mismo en cualquier máquina o servidor, sin necesidad de cuenta.",github:"GitHub",selfHostDocs:"Documentación de autoalojamiento"},agents:{sectionTitle:"Agentes compatibles",sectionSubtitle:"{{ides}} integraciones de IDE incorporadas, {{clis}} agentes CLI incorporados y {{extensions}} agentes de extensión residentes en el IDE. Los scripts de proveedor están en <code>adhdev-providers/</code>: añade los tuyos en <code>~/.adhdev/providers/</code>.",tierTested:"Probado",tierTestedDesc:"validado contra una app + versión real",tierCommunity:"Comunidad",tierCommunityDesc:"incorporado y con soporte de la comunidad",groupIdes:"IDE",hintIdes:"Conectado mediante Chrome DevTools Protocol. Lee el chat, envía prompts, cambia de sesión y captura pantallas.",groupCli:"Agentes CLI",hintCli:"Controlados a través de un adaptador PTY con reanudación y reconexión.",groupExtensions:"Agentes de extensión dentro del IDE",hintExtensions:"Conexión de webview por CDP para agentes que viven dentro de otro IDE."},pricing:{sectionTitle:"Precios sencillos a medida que crecen tus agentes",sectionSubtitle:"Empieza gratis con una máquina. Pasa a Pro para dos, o a Ultra para cinco. Sin cálculos por puesto, sin llamadas de ventas empresariales: solo los planes de abajo.",mostPopular:"Más popular",upgradeToPro:"Actualizar a Pro",footnote:"Precios en USD, sin incluir los impuestos aplicables. ¿Prefieres autoalojarlo? El daemon y el panel son de código abierto.",plans:{free:{period:"para siempre",tagline:"Todo lo que necesitas para controlar una máquina desde cualquier lugar.",cta:"Empezar gratis",features:{machine:"Una máquina, emparejada con un solo comando",p2p:"Chat, comandos, capturas y entrada remota por P2P",providers:"Todos los proveedores: agentes CLI e IDE",push:"Notificaciones push para aprobaciones y finalizaciones",share:"Un enlace de sesión compartida"}},pro:{period:"/mes",tagline:"Dos máquinas, para que Repo Mesh ejecute agentes en ambas, y más sesiones simultáneas.",cta:"Empezar prueba Pro de 7 días",features:{machines:"2 máquinas: ejecuta agentes en ambas",p2p:"Más sesiones P2P simultáneas",push:"Notificaciones push ilimitadas",share:"Más sesiones compartidas"}},ultra:{period:"/mes",tagline:"Todo lo de Pro, a mayor escala: más máquinas y límites más altos para el trabajo paralelo intensivo.",cta:"Pasar a Ultra",features:{machines:"5 máquinas: precio único, no por puesto",everything:"Todo lo de Pro",p2p:"El mayor número de sesiones P2P simultáneas",screenshots:"Minutos diarios de captura de pantalla ilimitados",webhooks:"Límites más altos de llamadas a la API",share:"Más sesiones compartidas"}}}},install:{sectionTitle:"Tres pasos hasta un panel funcional",sectionSubtitle:"Sin archivos de configuración. Sin claves de API que conectar. ADHDev no gestiona la autenticación de los agentes: cada herramienta conserva su propio inicio de sesión.",selectOs:"Seleccionar SO",osUnix:"macOS / Linux",osWindows:"Windows",copyInstall:"Copiar comando de instalación: {{cmd}}",copied:"Copiado",copy:"Copiar",platformNote:"macOS y Linux usan el script de Unix; Windows, el de PowerShell. Los tres se usan a diario.",arrow:"→",steps:{step1:{title:"Instala el daemon",desc:"Un solo comando instala el daemon y el CLI adhdev: el lanzador que ejecutas para emparejar máquinas e iniciar el daemon (no confundir con los agentes CLI que controla, como Claude Code o Codex). El mismo binario impulsa la nube y el modo autónomo."},step2:{title:"Vincula una máquina",desc:"Inicia sesión una vez con GitHub o Google y el daemon se empareja solo: no hay ningún token que copiar."},step3:{title:"Controla tus agentes",desc:"Lanza Claude Code, Codex CLI, Cursor CLI, Antigravity CLI, Kimi y otros agentes desde el panel. Lee el chat, envía prompts, aporta contexto visual (pega, arrastra y suelta, o sube varias imágenes a la vez), aprueba acciones y cambia de sesión."}}},cta:{headline:"Pon cada agente y cada máquina detrás de una sola cola.",subtitle:"Un comando, un daemon, cada agente que ya usas. Encola el trabajo y solo llega a main lo que pasa tus tests.",getStarted:"Empezar →",github:"GitHub",discord:"Discord"},footer:{docs:"Documentación",github:"GitHub",discord:"Discord",dashboard:"Panel",terms:"Términos",privacy:"Privacidad",contact:"Contacto",copyright:"© {{year}} RacoLab. Todos los derechos reservados."},imagePaste:{sectionTitle:"Pega una captura. Un agente de terminal en otra máquina la ve al instante.",sectionSubtitle:"Captura una imagen en tu portátil o móvil, pégala en el chat y un agente CLI que corre en la terminal de otra máquina la recibe como contexto visual —sin mover archivos ni SSH. Pega, arrastra y suelta, o sube hasta 5 imágenes (10 MB cada una) a la vez.",point1:"Pega desde el portapapeles, arrastra y suelta, o sube",point2:"Hasta 5 imágenes, 10 MB cada una",point3:"Llega a un agente de terminal PTY en cualquiera de tus máquinas",step1Label:"Pega la imagen y escribe una pregunta",step2Label:"Enviado — el agente lo procesa",step3Label:"Vio la imagen y respondió"},mobile:{sectionTitle:"Deja tu escritorio. Tus agentes siguen trabajando.",sectionSubtitle:"Una notificación push llega a tu móvil cuando un agente necesita aprobación o termina. Tócala, aprueba o rechaza, y luego continúa en el chat —todo desde el panel móvil, estés donde estés.",point1:"Notificación push al aprobar o completar",point2:"Un toque para aprobar o rechazar",point3:"Continúa con una instrucción de chat y guarda el móvil",notificationLabel:"Notificación push móvil para la aprobación de un agente",resumeLabel:"Aprobando y continuando desde el panel móvil",deviceShotLabel:"Pantalla de bloqueo real de iOS con una notificación push de aprobación de ADHDev que muestra el comando Bash que Claude Code quiere ejecutar",deviceShotCaption:"Dispositivo real — notificaciones push reales en un teléfono",point4:"Sin port forwarding, VPN ni DMZ — P2P con relé TURN conecta desde cafeterías, hotspots, escritorio o portátil, cualquier red con internet"},brain:{sectionTitle:"El modelo adecuado para cada tarea, en la suscripción que aún tiene margen.",sectionSubtitle:"Etiqueta una tarea como fácil, media o difícil y la malla aplica un preset acorde: proveedor, modelo y presupuesto de razonamiento. Cada máquina también lee cuánto queda de la ventana de 5 horas y la semanal de cada suscripción: un plan casi agotado se salta, y la cuota que caducaría sin usar en el siguiente reinicio se gasta primero.",point1:"Presets por dificultad: fácil / media / difícil",point2:"Cada preset elige proveedor, modelo y nivel de razonamiento",point3:"Evita los planes que están casi sin cuota"},scenario:{sectionTitle:"Un prompt. Mac construye, Windows prueba, main aterriza.",sectionSubtitle:"Una sesión real en tres pasos: describes el trabajo una vez, los agentes corren en paralelo en tus máquinas, y el código terminado llega a main — sin que estés frente a la terminal.",step1Label:"Describe el trabajo",step1Desc:"Dile qué construir, en una frase. Sin configuración, sin preparar cada máquina.",step2Label:"Agentes en paralelo",step2Desc:"El trabajo se reparte a la vez entre tus máquinas Mac y Windows — cada una en su propia rama, ejecutando los tests y comprobaciones de tu proyecto.",step3Label:"El código terminado aterriza en main",step3Desc:"Cuando las comprobaciones pasan, el trabajo se fusiona en main de forma automática y segura. Lo dudoso se reserva para tu revisión — nunca con force-push.",caveat:"Las máquinas Mac, Windows y Linux se usan a diario."}},H={submit:"Enviar",submitting:"Enviando…",cancelAria:"Cancelar la pregunta",actionRequired:"Acción necesaria",selectAllThatApply:"Selecciona todas las que correspondan",multipleChoice:"Selección múltiple",singleChoice:"Selección única",other:"Otro",answersRequired_one:"{{count}} pregunta aún necesita respuesta",answersRequired_other:"{{count}} preguntas aún necesitan respuesta",errorReviewPageNotFocused:"La terminal está mostrando otra pantalla, así que la respuesta no se envió — revisa la pantalla de la terminal o cierra esto e inténtalo de nuevo.",errorReviewUnconfirmed:"Las teclas de tu respuesta llegaron a la terminal, pero la pregunta sigue en pantalla — puede que la respuesta no se haya enviado. Revisa la terminal: si no se envió, responde allí; reenviarla desde aquí podría enviarla dos veces."},x={diffPreview:{truncatedAfter:"localmente para ver todo.",truncatedBefore:"Cambios recortados: ejecuta",empty:"No hay cambios que mostrar.",binary:"Archivo binario: no se pueden mostrar los cambios.",loading:"Cargando cambios…"},changeList:{stagedHint:"Preparado",noChanges:"No hay archivos modificados.",binaryBadge:"bin",truncatedNote:"Lista de archivos truncada: ejecuta <code>git status</code> localmente para ver la salida completa."},statusDialog:{working:"Procesando…",includeUntracked:"Incluir archivos sin seguimiento",messageRequired:"Mensaje (obligatorio)",fileFallback:"archivo",confirmRevert:"¿Revertir los cambios de {{path}}?",confirmPop:"¿Restaurar el stash más reciente?",confirmStash:"Guardar cambios en stash",confirmCheckpoint:"Crear commit de punto de control",copySummary:"Copiar resumen",copied:"Copiado al portapapeles",checkoutSelected:"Revertir selección",selectFileToRevert:"Selecciona un archivo para revertir",revertFile:"Revertir los cambios de {{path}}",popStash:"Restaurar stash",noStashes:"No hay stash que restaurar",popHint:"Restaura el stash más reciente",resolveBeforePop:"Resuelve los conflictos antes de restaurar un stash",stash:"Stash",stashHint:"Aparta los cambios actuales (git stash)",resolveBeforeStash:"Resuelve los conflictos antes de guardar en stash",checkpoint:"Punto de control",checkpointHint:"Crea un commit de git como punto de control",resolveBeforeCheckpoint:"Resuelve los conflictos antes de crear un punto de control",selectFile:"Selecciona un archivo para ver sus cambios",noDiffData:"No hay datos de diferencias.",loading:"Cargando…",fileCount_other:"{{count}} archivos",fileCount_one:"{{count}} archivo",stashed:"{{count}} en stash",deleted:"{{count}} eliminados",untracked:"{{count}} sin seguimiento",modified:"{{count}} modificados",staged:"{{count}} preparados",behind:"{{count}} por detrás",ahead:"{{count}} por delante",refresh:"Actualizar",openOnGithub:"Abrir en GitHub",title:"Estado de Git",conflicts:"conflictos",clean:"limpio"}},F={machineProviders:"Máquina → Proveedores",perProviderIntro:"Avisos y aprobación automática por proveedor:",mixed:"(algunos desactivados)",agentAlert:{noProgressDesc:"Avisa cuando un agente lleva un rato sin avanzar.",noProgress:"Sin progreso",approvalDesc:"Avisa cuando un agente espera tu aprobación.",approval:"Aprobación necesaria"},agentAlertsDesc:"Se aplica a todos los proveedores de tus máquinas en línea. Ajusta un proveedor concreto en Máquina → Proveedores.",permissionUnsupportedChip:"No compatible",permissionBlockedChip:"Bloqueadas",permissionNeededChip:"Se necesita permiso",permissionAllowedChip:"Permitidas",title:"Notificaciones",subtitle:"Avisos del navegador, push y agentes",sectionBrowserAlerts:"Alertas del navegador",masterToggleLabel:"Notificaciones",masterToggleDesc:"Interruptor general para todas las alertas",browserNotificationsLabel:"Notificaciones del navegador",browserNotificationsDesc:"Alertas de escritorio cuando la pestaña está inactiva",browserBackgroundInfo:"Las alertas del navegador solo se activan mientras esta pestaña del panel permanece abierta en segundo plano.",browserBackgroundInfoWithPush:"Las alertas del navegador solo se activan mientras esta pestaña del panel permanece abierta en segundo plano. Si cierras la pestaña, usa las notificaciones push en su lugar.",permissionDefault:"Este navegador aún no ha concedido permiso de notificaciones. Permítelo para recibir alertas del navegador.",allowNotifications:"Permitir notificaciones",permissionDenied:"Las notificaciones del navegador están bloqueadas en los ajustes del sitio o del navegador. Vuelve a habilitarlas allí para recibir alertas de escritorio.",permissionUnsupported:"Este navegador no puede mostrar notificaciones de escritorio aquí. Usa un navegador de escritorio compatible o recurre a las notificaciones push donde estén disponibles.",completionAlertsLabel:"Alertas de finalización",completionAlertsDesc:"Notificar cuando el agente termina una tarea",approvalAlertsLabel:"Alertas de aprobación",approvalAlertsDesc:"Notificar cuando el agente necesita aprobación",connectionAlertsLabel:"Alertas de conexión",connectionAlertsDesc:"Alertar cuando una máquina se desconecta",allDisabled:"Todas las notificaciones están desactivadas.",sectionProviderAlerts:"Avisos de agentes",loading:"Cargando...",refresh:"Actualizar",noOnlineMachines:"No hay máquinas en línea.",loadingProviderSettings:"Cargando ajustes de proveedor...",soundEffectsLabel:"Efectos de sonido",soundEffectsDesc:"Reproducir un sonido cuando el agente completa o necesita aprobación"},U={pageTitle:"Aprobaciones",pageSubtitle:"Sesiones que esperan tu decisión.",pending:"Pendientes",loading:"Cargando aprobaciones…",emptyHint:"Las solicitudes de aprobación de cualquier máquina conectada aparecerán aquí automáticamente."},_={title:"Configuración guiada de la malla",close:"Cerrar",machines:{title:"Seleccionar máquinas",description:"Elige la malla a configurar y conecta las máquinas que ejecutarán su trabajo. Crear una malla también conecta el espacio de trabajo elegido como su primer nodo.",noMachinesDescription:"Aún no hay ninguna máquina registrada. Instala primero el daemon en una máquina: se empareja automáticamente al iniciar sesión.",noMachinesFallback:"Inicia el daemon local y vuelve aquí.",nodeCount:"{{count}} nodos",createNew:"Crear nueva malla",loadingMeshes:"Cargando mallas…",meshName:"Nombre de la malla",machine:"Máquina",machineSelectPlaceholder:"Selecciona una máquina",workspace:"Espacio de trabajo (ruta del repositorio)",workspacePlaceholder:"/path/to/repo",workspaceSelectPlaceholder:"Selecciona un espacio de trabajo",workspaceCustom:"Introducir una ruta manualmente…",pickFromKnown:"Elegir entre espacios de trabajo conocidos",planChecking:"Comprobando el espacio de trabajo…",planOk:"El espacio de trabajo se ve bien: {{identity}}",planExists:"Este espacio de trabajo ya pertenece a un mesh existente — añádelo como nodo allí en lugar de crear un mesh nuevo.",creating:"Creando…",create:"Crear malla",createFailed:"Error al crear",attachTitle:"Conectar otra máquina",allMachinesAttached:"Todas las máquinas registradas ya están conectadas a esta malla.",attaching:"Conectando…",addMachine:"Añadir máquina"},quotaPolicy:{blankMeansDefaultShort:"Vacío = predeterminado",title:"Enrutamiento según la cuota",description:"Cuando un nodo informa cuánta cuota le queda con su proveedor de IA, el coordinador puede omitir los nodos casi agotados y preferir los que tienen más margen. Estos umbrales deciden cuándo ocurre. Las lecturas ausentes o desactualizadas siempre se ignoran, así que ningún nodo queda excluido por datos obsoletos.",sessionMin:"Mínimo de sesión",sessionMinHint:"Omitir un proveedor cuya ventana corta tenga menos de esto disponible.",weeklyMin:"Mínimo semanal",weeklyMinHint:"Omitir un proveedor cuya ventana semanal tenga menos de esto disponible.",resetImminent:"Margen de reinicio",resetImminentHint:"Ignorar una ventana de sesión baja si se reinicia dentro de este tiempo.",staleAfter:"Caducidad de la lectura",staleAfterHint:"Solo como respaldo: una lectura sigue siendo válida hasta que su ventana se restablezca; este límite de edad solo aplica a lecturas sin hora de restablecimiento.",spreadBonus:"Preferencia por margen",spreadBonusHint:"Cuánto se prefiere tener más cuota restante. Nunca anula una coincidencia de dificultad.",sessionAxisWeeklyHeadroom:"Margen semanal para la urgencia de sesión",sessionAxisWeeklyHeadroomHint:"Solo priorizar un reinicio inminente de la ventana de sesión de 5 horas cuando la cuota semanal restante sea igual o superior a esto. La cuota de 5 horas no usada se pierde para siempre, pero consumirla cuando la ventana semanal ya está ajustada cuesta más de lo que ahorra.",minutes:"min",blankMeansDefault:"Deja un campo vacío para usar su valor predeterminado (el que aparece atenuado).",useDefaults:"Usar predeterminados",saving:"Guardando…",errors:{notANumber:"Introduce un número.",percentRange:"Debe estar entre 0 y 100.",negative:"No puede ser negativo."}},continueToMesh:"Continuar a Mesh"},O={dashboard:"Panel",machines:"Máquinas",notifications:"Notificaciones",mesh:"Mesh",marketplace:"Marketplace",api:"API",webhooks:"Webhooks",account:"Cuenta",settings:"Ajustes",docs:"Documentación",about:"Acerca de",chats:"Chats"},B={controls:e,sessionStatus:a,language:o,common:n,connection:i,toast:s,notification:r,event:t,dashboard:d,cliStop:l,approval:c,chatControls:u,newSession:p,mobileInbox:m,mesh:g,chat:v,chatPane:b,chatInput:h,paneGroup:f,terminal:C,conversation:y,cliView:A,launch:q,standalone:S,cloud:D,app:T,chatList:E,screenshot:P,remote:L,sessionNav:w,sessionInfo:k,machine:I,sessionHost:R,sessionHostSurface:j,settings:M,historyModal:N,landing:z,interactivePrompt:H,git:x,notifications:F,approvals:U,setupWizard:_,nav:O};export{T as app,c as approval,U as approvals,v as chat,u as chatControls,h as chatInput,E as chatList,b as chatPane,l as cliStop,A as cliView,D as cloud,n as common,i as connection,e as controls,y as conversation,d as dashboard,B as default,t as event,x as git,N as historyModal,H as interactivePrompt,z as landing,o as language,q as launch,I as machine,g as mesh,m as mobileInbox,O as nav,p as newSession,r as notification,F as notifications,f as paneGroup,L as remote,P as screenshot,R as sessionHost,j as sessionHostSurface,k as sessionInfo,w as sessionNav,a as sessionStatus,M as settings,_ as setupWizard,S as standalone,C as terminal,s as toast};
|