@tunnelbox/core 0.1.18 → 0.1.21
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 +1191 -22
- package/locales/de-DE.json +307 -166
- package/locales/en-US.json +307 -166
- package/locales/es-ES.json +307 -166
- package/locales/fr-FR.json +307 -166
- package/locales/ja-JP.json +307 -166
- package/locales/ko-KR.json +307 -166
- package/locales/zh-CN.json +307 -166
- package/locales/zh-TW.json +307 -166
- package/package.json +2 -1
- package/src/cli.ts +58 -2
- package/src/qr.ts +2 -1
- package/src/state.ts +6 -5
- package/src/types.ts +2 -0
package/locales/es-ES.json
CHANGED
|
@@ -1,166 +1,307 @@
|
|
|
1
|
-
{
|
|
2
|
-
"agent.err.createSession": "No se pudo crear la sesión",
|
|
3
|
-
"agent.err.httpClient": "No se puede acceder al cliente HTTP de opencode",
|
|
4
|
-
"agent.err.unknownPerm": "Solicitud de permiso desconocida: {id}",
|
|
5
|
-
"agent.err.unknownQuestion": "Solicitud de pregunta desconocida: {id}",
|
|
6
|
-
"agent.log.fallback404": "El punto de acceso preferido devolvió 404; se recurre al otro: {message}",
|
|
7
|
-
"agent.log.gotPermReply": "Respuesta de permiso recibida del teléfono (id={id} {reply} {version})",
|
|
8
|
-
"agent.log.gotQuestionReply": "Respuesta de pregunta recibida del teléfono (id={id} {status} {version})",
|
|
9
|
-
"agent.log.handleFailed": "Error al procesar {type}: {message}",
|
|
10
|
-
"agent.log.msgOk": "Mensajes de sesión OK session={session} data={count} modo={limited} win={win} ms={ms}",
|
|
11
|
-
"agent.log.msgFailed": "Error al obtener mensajes de sesión session={session} err={err} ms={ms}",
|
|
12
|
-
"agent.log.msgLimitFallback": "limit no compatible; se vuelve a la obtención completa (session={session})",
|
|
13
|
-
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
-
"agent.log.pendingResent": "session.pending: reenviadas {count} solicitud(es) pendientes para {session}",
|
|
15
|
-
"agent.log.unhandledType": "Tipo de mensaje no gestionado: {type}",
|
|
16
|
-
"events.log.fwdPermission": "Solicitud de permiso reenviada al teléfono (id={id} tool={tool} {version})",
|
|
17
|
-
"events.log.sessionDeleted": "session.deleted reenviada al teléfono (session={session})",
|
|
18
|
-
"events.log.permissionReplied": "opencode confirmó permission.replied (id={id} {response})",
|
|
19
|
-
"events.log.questionRejected": "opencode confirmó question.rejected (id={id})",
|
|
20
|
-
"events.log.questionReplied": "opencode confirmó question.replied (id={id})",
|
|
21
|
-
"index.error.connectRelay": "No se pudo conectar con el relay; compruebe su dirección e inténtelo de nuevo",
|
|
22
|
-
"index.error.pairTimeout": "Tiempo de espera agotado al obtener el código de emparejamiento (el relay no responde)",
|
|
23
|
-
"index.log.claimed": "Vinculado a su cuenta de teléfono. El teléfono se conecta ahora directamente desde «Mis PC»; no hace falta volver a escanear",
|
|
24
|
-
"index.log.connectedRelay": "Conectado al relay {url}",
|
|
25
|
-
"index.log.loaded": "Plugin tunnelbox opencode iniciado (v{version})",
|
|
26
|
-
"index.log.disconnected": "Desconectado del relay, reconectando automáticamente…",
|
|
27
|
-
"index.log.exit": "Salido",
|
|
28
|
-
"index.log.pairCode": "Código de emparejamiento generado: {code}",
|
|
29
|
-
"index.log.pairingStillClaimed": "Este código de emparejamiento es solo para volver a emparejar un teléfono nuevo con la misma cuenta; este equipo ya está vinculado y sigue accesible desde «Mis computadoras» en el teléfono.",
|
|
30
|
-
"index.log.pairingPreparing": "Conectando al relay y generando el código de emparejamiento…",
|
|
31
|
-
"index.log.permissionToPhone": "Solicitud de permiso → aprobación en el teléfono (id={id} tool={tool})",
|
|
32
|
-
"index.log.permissionTuiFallback": "App sin conexión; la solicitud la gestiona el TUI de opencode (id={id} tool={tool})",
|
|
33
|
-
"index.log.relayError": "Error del relay: {msg}",
|
|
34
|
-
"index.log.resetIdentity": "Desvinculado de la cuenta; se restablece la identidad y se genera un nuevo código de emparejamiento…",
|
|
35
|
-
"index.log.unknown": "Desconocido",
|
|
36
|
-
"install.codeLine": "Código de emparejamiento: {code}",
|
|
37
|
-
"install.commandInstalled": "Comando instalado: {path}",
|
|
38
|
-
"install.done": "Hecho. Se intentó conectar con el relay para mostrar la información de emparejamiento:",
|
|
39
|
-
"install.failConnect": "(No se pudo conectar de inmediato con el relay para imprimir el emparejamiento — relay inaccesible o versión de Node demasiado antigua.",
|
|
40
|
-
"install.failConnectHint": "Tras reiniciar opencode, consulte el código QR del terminal con --print-logs, o escriba “mostrar código de emparejamiento del teléfono” o /pair en opencode.)",
|
|
41
|
-
"install.hintFresh": "Nota: el código de emparejamiento es de un solo uso y válido durante unos 10 minutos. Si inicia opencode más tarde, use la información más reciente impresa al iniciar u obtenida con /pair.",
|
|
42
|
-
"install.pluginInstalled": "Complemento instalado: {path}",
|
|
43
|
-
"install.qrUnavailable": "(Representación del QR no disponible: use el código anterior)",
|
|
44
|
-
"install.qrcodeEnsure": "Instalando qrcode en el directorio de configuración de opencode…",
|
|
45
|
-
"install.qrcodeFail": "Error al instalar qrcode (no es crítico; solo se muestra el código de emparejamiento): {err}",
|
|
46
|
-
"install.relayError": "El relay devolvió un error: {msg}",
|
|
47
|
-
"install.scanHint": "Abra tunnelbox en el teléfono, pulse “Escanear para emparejar” y escanee el código QR superior para conectar:",
|
|
48
|
-
"pair.heading": "Emparejamiento de teléfono tunnelbox",
|
|
49
|
-
"pair.howTo": "Abra la aplicación tunnelbox en el teléfono y escanee el código QR superior con “Escanear para emparejar”, o introduzca el código de emparejamiento manualmente.",
|
|
50
|
-
"pair.oneTime": "El código de emparejamiento es de un solo uso y
|
|
51
|
-
"pair.promptBody": "Muéstrame la información de emparejamiento con el teléfono de este ordenador: el código de emparejamiento y un código QR escaneable. Mantén el código QR dentro de un bloque de código de ancho fijo y reprodúcelo carácter por carácter para que mi teléfono pueda escanearlo.",
|
|
52
|
-
"pair.promptDescription": "Mostrar el código de emparejamiento y el QR escaneable",
|
|
53
|
-
"pair.scanIntro": "**Emparejar escaneando**: abra la aplicación tunnelbox en el teléfono, pulse “Escanear para emparejar” y escanee el código QR inferior para conectar automáticamente.",
|
|
54
|
-
"perm.promptAuthorize": "opencode solicita autorización",
|
|
55
|
-
"perm.promptPatterns": "opencode solicita acceso a: {list}",
|
|
56
|
-
"perm.promptResource": "opencode solicita acceso a los recursos: {list}",
|
|
57
|
-
"perm.promptTool": "opencode solicita ejecutar {tool}",
|
|
58
|
-
"qr.codeLabel": "Código de emparejamiento",
|
|
59
|
-
"qr.fileWritten": "Información de emparejamiento escrita en: {path}",
|
|
60
|
-
"qr.openHint": "Abra la aplicación tunnelbox en el teléfono y escanee el código QR superior, o introduzca el código de emparejamiento manualmente en la aplicación.",
|
|
61
|
-
"qr.titleNoType": "emparejamiento de teléfono tunnelbox",
|
|
62
|
-
"qr.titleWithType": "emparejamiento de teléfono tunnelbox {type}",
|
|
63
|
-
"qr.unavailable": "(qrcode no instalado: use el código de emparejamiento anterior)",
|
|
64
|
-
"claude.errBusy": "Esta sesión está en ejecución; espere a que termine o deténgala primero",
|
|
65
|
-
"claude.errTurn": "error de generación",
|
|
66
|
-
"claude.pairingStillClaimed": "Ya vinculado a una cuenta de teléfono: este código solo sirve para emparejar un nuevo dispositivo en la misma cuenta; el dispositivo actual se conecta directamente desde Mis computadoras",
|
|
67
|
-
"claude.pairForced": "--pair: solicitud forzada de código de emparejamiento (solo esta ejecución)",
|
|
68
|
-
"claude.pairUnclaimed": "No se detectó una cuenta vinculada; iniciando la guía de emparejamiento:",
|
|
69
|
-
"claude.claimedHint": "Vinculado a una cuenta de teléfono: conéctese directamente desde Mis computadoras en el teléfono",
|
|
70
|
-
"claude.errStartFailed": "Error al iniciar:",
|
|
71
|
-
"claude.msgStarted": "Adaptador de Claude Code iniciado (Ctrl+C para salir)",
|
|
72
|
-
"claude.warnInvalidMode": "Se ignora TUNNELBOX_CLAUDE_MODE no válido: {raw} (permitido {list})",
|
|
73
|
-
"claude.warnInvalidThinking": "Se ignora TUNNELBOX_CLAUDE_THINKING no válido: {raw} (off|adaptive|enabled[:budget])",
|
|
74
|
-
"claude.cmdNew": "Nueva sesión",
|
|
75
|
-
"claude.cmdHelp": "Mostrar ayuda",
|
|
76
|
-
"claude.errNoRelay": "No hay URL de relay configurada: inyecte un valor con --env o sobrescríbalo con TUNNELBOX_RELAY_URL",
|
|
77
|
-
"claude.logConnected": "Conectado al relay {url}",
|
|
78
|
-
"claude.logMsgUncaught": "Excepción no capturada al procesar el mensaje: {message}",
|
|
79
|
-
"claude.reasonDisconnect": "Relay desconectado (rechazo automático fail-closed)",
|
|
80
|
-
"claude.reasonUnbind": "Cuenta desvinculada (rechazo automático fail-closed)",
|
|
81
|
-
"claude.logDisconnected": "Desconectado del relay, reconectando automáticamente…",
|
|
82
|
-
"claude.logPairCode": "Código de emparejamiento generado: {code}",
|
|
83
|
-
"claude.logUnhandledType": "Tipo de mensaje no manejado: {type}",
|
|
84
|
-
"claude.logHandleFailed": "No se pudo procesar {type}: {message}",
|
|
85
|
-
"claude.newSessionTitle": "Nueva sesión",
|
|
86
|
-
"claude.helpText": "Comandos compatibles:\n- /new nueva sesión\n- /help mostrar ayuda",
|
|
87
|
-
"claude.logPromptFailed": "session.prompt falló: {message}",
|
|
88
|
-
"claude.logAbortSent": "Se envió la interrupción (session={session})",
|
|
89
|
-
"claude.logAbortFailed": "Error al interrumpir (session={session}): {message}",
|
|
90
|
-
"claude.errBadWorkspaceEmpty": "Falta la ruta del espacio de trabajo",
|
|
91
|
-
"claude.errBadWorkspaceNotDir": "El directorio no existe o no se puede usar",
|
|
92
|
-
"claude.logWorkspaceSwitched": "Espacio de trabajo cambiado: {path}",
|
|
93
|
-
"claude.logUnknownQuestionReply": "Respuesta de pregunta estructurada sin coincidencia (id={id})",
|
|
94
|
-
"claude.logFlushedQuestions": "{count} pregunta(s) pendiente(s) cancelada(s): {reason}",
|
|
95
|
-
"claude.logFlushedApprovals": "{count} solicitud(es) pendiente(s) rechazada(s): {reason}",
|
|
96
|
-
"claude.logPendingResent": "session.pending: se reenviaron {count} elemento(s) pendiente(s) de {session}",
|
|
97
|
-
"claude.logSetModeFailed": "setPermissionMode falló (session={session}): {message}",
|
|
98
|
-
"claude.errWorkspaceMissing": "El espacio de trabajo no existe: {dir}",
|
|
99
|
-
"claude.logSessionError": "Error de sesión (session={session}): {message}",
|
|
100
|
-
"claude.logOfflineDenyTool": "Relay sin conexión, rechazo automático de la herramienta {tool}",
|
|
101
|
-
"claude.errOfflineDeny": "Relay sin conexión, rechazo automático (fail-closed)",
|
|
102
|
-
"claude.logAuqDisabled": "AskUserQuestion deshabilitado (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), rechazo automático",
|
|
103
|
-
"claude.errAuqDisabled": "AskUserQuestion no está habilitado",
|
|
104
|
-
"claude.logAuqParseFailed": "No se pudo analizar la entrada de AskUserQuestion, rechazo automático (fail-closed)",
|
|
105
|
-
"claude.errAuqParse": "No se pudieron analizar las preguntas",
|
|
106
|
-
"claude.logAuqSkipped": "AskUserQuestion sin respuesta/cancelada (session={session})",
|
|
107
|
-
"claude.errAuqCancelled": "El usuario no seleccionó (cancelado)",
|
|
108
|
-
"claude.logAuqDone": "AskUserQuestion respondida (session={session})",
|
|
109
|
-
"claude.promptRunTool": "Claude Code solicita ejecutar {tool}",
|
|
110
|
-
"claude.errApprovalTimeout": "Tiempo de aprobación agotado, rechazo automático (fail-closed)",
|
|
111
|
-
"claude.errUserDenied": "Rechazado por el usuario",
|
|
112
|
-
"claude.errAborted": "Solicitud interrumpida",
|
|
113
|
-
"claude.logPermToPhone": "Solicitud de permiso (tool={tool}) → enviada al teléfono permissionID={id}",
|
|
114
|
-
"claude.errRelayUnreachable": "Relay inaccesible, rechazo automático (fail-closed)",
|
|
115
|
-
"claude.logQuestionOffline": "Relay sin conexión, pregunta estructurada cancelada automáticamente",
|
|
116
|
-
"claude.logQuestionToPhone": "Pregunta estructurada ({count}) → enviada al teléfono questionID={id}",
|
|
117
|
-
"claude.logDialogOffline": "Relay sin conexión, diálogo cancelado automáticamente ({tool})",
|
|
118
|
-
"claude.logDialogToPhone": "Solicitud de diálogo (kind={kind} tool={tool}) → enviada al teléfono permissionID={id}",
|
|
119
|
-
"claude.logAuqDialogParse": "No se pudo analizar el payload de AskUserQuestion; se mantiene el comportamiento predeterminado (session={session})",
|
|
120
|
-
"claude.logDialogUnmapped": "request_user_dialog(kind={kind}) sin correspondencia, se mantiene el comportamiento predeterminado (session={session})",
|
|
121
|
-
"claude.promptMcpAuth": "MCP «{server}» solicita autorización",
|
|
122
|
-
"claude.logElicitUnmapped": "Elicitación MCP (server={server}, mode={mode}) no manejada, rechazo automático (session={session})",
|
|
123
|
-
"claude.logResetIdentity": "Cuenta desvinculada; restableciendo identidad y generando un nuevo código de emparejamiento…",
|
|
124
|
-
"claude.dialogConfirm": "Claude Code solicita confirmación ({kind})",
|
|
125
|
-
"claude.resultTruncated": "… (resultado truncado)",
|
|
126
|
-
"claude.streamError": "error de streaming de claude",
|
|
127
|
-
"claude.errListSessions": "No se pudo leer la lista de sesiones de Claude",
|
|
128
|
-
"claude.errReadHistory": "No se pudo leer el historial de la sesión ({id})",
|
|
129
|
-
"setup.langSet": "Idioma de ejecución establecido en",
|
|
130
|
-
"setup.langHint": "El adaptador emitirá en este idioma tras reiniciar (TUNNELBOX_LANG puede sobrescribirlo en tiempo de ejecución). Archivo de estado:",
|
|
131
|
-
"setup.langCurrent": "Idioma de ejecución actual",
|
|
132
|
-
"hermes.errNoRelay": "URL del relé no configurada: use --env para inyectar un valor predeterminado o sobrescríbalo en tiempo de ejecución con TUNNELBOX_RELAY_URL",
|
|
133
|
-
"hermes.logConnected": "Conectado al relé {url}",
|
|
134
|
-
"hermes.logMsgUncaught": "Excepción no capturada al procesar el mensaje: {message}",
|
|
135
|
-
"hermes.logDisconnected": "Desconectado del relé, reconectando automáticamente…",
|
|
136
|
-
"hermes.logPairCode": "Código de emparejamiento generado: {code}",
|
|
137
|
-
"hermes.logUnhandledType": "Tipo de mensaje no procesado: {type}",
|
|
138
|
-
"hermes.logHandleFailed": "Error al procesar {type}: {message}",
|
|
139
|
-
"hermes.logClaimed": "Vinculado a su cuenta de teléfono. El teléfono se conecta ahora directamente desde Mis computadoras",
|
|
140
|
-
"hermes.logResetIdentity": "Desvinculado de la cuenta; restableciendo identidad y generando un nuevo código de emparejamiento…",
|
|
141
|
-
"hermes.cmdNew": "Nueva sesión",
|
|
142
|
-
"hermes.cmdHelp": "Mostrar ayuda",
|
|
143
|
-
"hermes.newSessionTitle": "Nueva sesión",
|
|
144
|
-
"hermes.helpText": "Comandos admitidos:\n- /new nueva sesión\n- /help mostrar ayuda",
|
|
145
|
-
"hermes.errBusy": "Esta sesión se está generando; espere a que termine o deténgala primero",
|
|
146
|
-
"hermes.errBadWorkspace": "Este directorio no existe o no se puede usar",
|
|
147
|
-
"hermes.logWorkspaceSwitched": "Espacio de trabajo cambiado: {path}",
|
|
148
|
-
"hermes.errWorkspaceMissing": "El espacio de trabajo no existe: {dir}",
|
|
149
|
-
"hermes.errStartFailed": "Error al iniciar: {message}",
|
|
150
|
-
"hermes.msgStarted": "Adaptador de Hermes iniciado (Ctrl+C para salir)",
|
|
151
|
-
"hermes.logAbortSent": "Interrupción enviada (session={session})",
|
|
152
|
-
"hermes.logPromptFailed": "session.prompt falló: {message}",
|
|
153
|
-
"hermes.logTurnError": "Error de turno (session={session}): {message}",
|
|
154
|
-
"hermes.logPairForced": "--pair: solicitud forzada del código de emparejamiento (solo esta ejecución)",
|
|
155
|
-
"hermes.pairingStillClaimed": "Ya vinculado a una cuenta de teléfono: este código solo sirve para reemparejar un nuevo dispositivo en la misma cuenta; el dispositivo actual se conecta directamente desde Mis computadoras",
|
|
156
|
-
"hermes.logPairNoRelay": "No se puede solicitar un código de emparejamiento: no hay URL de relé configurada",
|
|
157
|
-
"hermes.errSpawnHermes": "No se puede iniciar Hermes ({bin}): confirme que está instalado ({err})",
|
|
158
|
-
"hermes.errHermesExit": "hermes salió ({code}): {err}",
|
|
159
|
-
"hermes.logSessionUpdated": "Sesión actualizada (session={session})",
|
|
160
|
-
"hermes.errNoInject": "Inyección de mensaje del teléfono no disponible (sesión no interactiva o proceso no listo)",
|
|
161
|
-
"hermes.pairNoRelay": "No se puede alcanzar el relé (relé inaccesible o websockets ausente)",
|
|
162
|
-
"hermes.pairTimeout": "Tiempo de espera agotado al solicitar el código de emparejamiento (relé sin respuesta)",
|
|
163
|
-
"hermes.errToolPair": "fallo de tunnelbox_pair: {err}",
|
|
164
|
-
"hermes.errToolStatus": "fallo de tunnelbox_status: {err}",
|
|
165
|
-
"hermes.cliUsage": "Uso: /tunnelbox <pair|status>\n pair solicitar e imprimir un código de emparejamiento\n status mostrar estado de relé/enlace/conexión"
|
|
166
|
-
|
|
1
|
+
{
|
|
2
|
+
"agent.err.createSession": "No se pudo crear la sesión",
|
|
3
|
+
"agent.err.httpClient": "No se puede acceder al cliente HTTP de opencode",
|
|
4
|
+
"agent.err.unknownPerm": "Solicitud de permiso desconocida: {id}",
|
|
5
|
+
"agent.err.unknownQuestion": "Solicitud de pregunta desconocida: {id}",
|
|
6
|
+
"agent.log.fallback404": "El punto de acceso preferido devolvió 404; se recurre al otro: {message}",
|
|
7
|
+
"agent.log.gotPermReply": "Respuesta de permiso recibida del teléfono (id={id} {reply} {version})",
|
|
8
|
+
"agent.log.gotQuestionReply": "Respuesta de pregunta recibida del teléfono (id={id} {status} {version})",
|
|
9
|
+
"agent.log.handleFailed": "Error al procesar {type}: {message}",
|
|
10
|
+
"agent.log.msgOk": "Mensajes de sesión OK session={session} data={count} modo={limited} win={win} ms={ms}",
|
|
11
|
+
"agent.log.msgFailed": "Error al obtener mensajes de sesión session={session} err={err} ms={ms}",
|
|
12
|
+
"agent.log.msgLimitFallback": "limit no compatible; se vuelve a la obtención completa (session={session})",
|
|
13
|
+
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
+
"agent.log.pendingResent": "session.pending: reenviadas {count} solicitud(es) pendientes para {session}",
|
|
15
|
+
"agent.log.unhandledType": "Tipo de mensaje no gestionado: {type}",
|
|
16
|
+
"events.log.fwdPermission": "Solicitud de permiso reenviada al teléfono (id={id} tool={tool} {version})",
|
|
17
|
+
"events.log.sessionDeleted": "session.deleted reenviada al teléfono (session={session})",
|
|
18
|
+
"events.log.permissionReplied": "opencode confirmó permission.replied (id={id} {response})",
|
|
19
|
+
"events.log.questionRejected": "opencode confirmó question.rejected (id={id})",
|
|
20
|
+
"events.log.questionReplied": "opencode confirmó question.replied (id={id})",
|
|
21
|
+
"index.error.connectRelay": "No se pudo conectar con el relay; compruebe su dirección e inténtelo de nuevo",
|
|
22
|
+
"index.error.pairTimeout": "Tiempo de espera agotado al obtener el código de emparejamiento (el relay no responde)",
|
|
23
|
+
"index.log.claimed": "Vinculado a su cuenta de teléfono. El teléfono se conecta ahora directamente desde «Mis PC»; no hace falta volver a escanear",
|
|
24
|
+
"index.log.connectedRelay": "Conectado al relay {url}",
|
|
25
|
+
"index.log.loaded": "Plugin tunnelbox opencode iniciado (v{version})",
|
|
26
|
+
"index.log.disconnected": "Desconectado del relay, reconectando automáticamente…",
|
|
27
|
+
"index.log.exit": "Salido",
|
|
28
|
+
"index.log.pairCode": "Código de emparejamiento generado: {code}",
|
|
29
|
+
"index.log.pairingStillClaimed": "Este código de emparejamiento es solo para volver a emparejar un teléfono nuevo con la misma cuenta; este equipo ya está vinculado y sigue accesible desde «Mis computadoras» en el teléfono.",
|
|
30
|
+
"index.log.pairingPreparing": "Conectando al relay y generando el código de emparejamiento…",
|
|
31
|
+
"index.log.permissionToPhone": "Solicitud de permiso → aprobación en el teléfono (id={id} tool={tool})",
|
|
32
|
+
"index.log.permissionTuiFallback": "App sin conexión; la solicitud la gestiona el TUI de opencode (id={id} tool={tool})",
|
|
33
|
+
"index.log.relayError": "Error del relay: {msg}",
|
|
34
|
+
"index.log.resetIdentity": "Desvinculado de la cuenta; se restablece la identidad y se genera un nuevo código de emparejamiento…",
|
|
35
|
+
"index.log.unknown": "Desconocido",
|
|
36
|
+
"install.codeLine": "Código de emparejamiento: {code}",
|
|
37
|
+
"install.commandInstalled": "Comando instalado: {path}",
|
|
38
|
+
"install.done": "Hecho. Se intentó conectar con el relay para mostrar la información de emparejamiento:",
|
|
39
|
+
"install.failConnect": "(No se pudo conectar de inmediato con el relay para imprimir el emparejamiento — relay inaccesible o versión de Node demasiado antigua.",
|
|
40
|
+
"install.failConnectHint": "Tras reiniciar opencode, consulte el código QR del terminal con --print-logs, o escriba “mostrar código de emparejamiento del teléfono” o /pair en opencode.)",
|
|
41
|
+
"install.hintFresh": "Nota: el código de emparejamiento es de un solo uso y válido durante unos 10 minutos. Si inicia opencode más tarde, use la información más reciente impresa al iniciar u obtenida con /pair.",
|
|
42
|
+
"install.pluginInstalled": "Complemento instalado: {path}",
|
|
43
|
+
"install.qrUnavailable": "(Representación del QR no disponible: use el código anterior)",
|
|
44
|
+
"install.qrcodeEnsure": "Instalando qrcode en el directorio de configuración de opencode…",
|
|
45
|
+
"install.qrcodeFail": "Error al instalar qrcode (no es crítico; solo se muestra el código de emparejamiento): {err}",
|
|
46
|
+
"install.relayError": "El relay devolvió un error: {msg}",
|
|
47
|
+
"install.scanHint": "Abra tunnelbox en el teléfono, pulse “Escanear para emparejar” y escanee el código QR superior para conectar:",
|
|
48
|
+
"pair.heading": "Emparejamiento de teléfono tunnelbox",
|
|
49
|
+
"pair.howTo": "Abra la aplicación tunnelbox en el teléfono y escanee el código QR superior con “Escanear para emparejar”, o introduzca el código de emparejamiento manualmente.",
|
|
50
|
+
"pair.oneTime": "El código de emparejamiento es de un solo uso y válido unos 10 minutos; deja de funcionar al usarse o caducar. Pida «actualizar el código de emparejamiento» para obtener uno nuevo.",
|
|
51
|
+
"pair.promptBody": "Muéstrame la información de emparejamiento con el teléfono de este ordenador: el código de emparejamiento y un código QR escaneable. Mantén el código QR dentro de un bloque de código de ancho fijo y reprodúcelo carácter por carácter para que mi teléfono pueda escanearlo.",
|
|
52
|
+
"pair.promptDescription": "Mostrar el código de emparejamiento y el QR escaneable",
|
|
53
|
+
"pair.scanIntro": "**Emparejar escaneando**: abra la aplicación tunnelbox en el teléfono, pulse “Escanear para emparejar” y escanee el código QR inferior para conectar automáticamente.",
|
|
54
|
+
"perm.promptAuthorize": "opencode solicita autorización",
|
|
55
|
+
"perm.promptPatterns": "opencode solicita acceso a: {list}",
|
|
56
|
+
"perm.promptResource": "opencode solicita acceso a los recursos: {list}",
|
|
57
|
+
"perm.promptTool": "opencode solicita ejecutar {tool}",
|
|
58
|
+
"qr.codeLabel": "Código de emparejamiento",
|
|
59
|
+
"qr.fileWritten": "Información de emparejamiento escrita en: {path}",
|
|
60
|
+
"qr.openHint": "Abra la aplicación tunnelbox en el teléfono y escanee el código QR superior, o introduzca el código de emparejamiento manualmente en la aplicación.",
|
|
61
|
+
"qr.titleNoType": "emparejamiento de teléfono tunnelbox",
|
|
62
|
+
"qr.titleWithType": "emparejamiento de teléfono tunnelbox {type}",
|
|
63
|
+
"qr.unavailable": "(qrcode no instalado: use el código de emparejamiento anterior)",
|
|
64
|
+
"claude.errBusy": "Esta sesión está en ejecución; espere a que termine o deténgala primero",
|
|
65
|
+
"claude.errTurn": "error de generación",
|
|
66
|
+
"claude.pairingStillClaimed": "Ya vinculado a una cuenta de teléfono: este código solo sirve para emparejar un nuevo dispositivo en la misma cuenta; el dispositivo actual se conecta directamente desde Mis computadoras",
|
|
67
|
+
"claude.pairForced": "--pair: solicitud forzada de código de emparejamiento (solo esta ejecución)",
|
|
68
|
+
"claude.pairUnclaimed": "No se detectó una cuenta vinculada; iniciando la guía de emparejamiento:",
|
|
69
|
+
"claude.claimedHint": "Vinculado a una cuenta de teléfono: conéctese directamente desde Mis computadoras en el teléfono",
|
|
70
|
+
"claude.errStartFailed": "Error al iniciar:",
|
|
71
|
+
"claude.msgStarted": "Adaptador de Claude Code iniciado (Ctrl+C para salir)",
|
|
72
|
+
"claude.warnInvalidMode": "Se ignora TUNNELBOX_CLAUDE_MODE no válido: {raw} (permitido {list})",
|
|
73
|
+
"claude.warnInvalidThinking": "Se ignora TUNNELBOX_CLAUDE_THINKING no válido: {raw} (off|adaptive|enabled[:budget])",
|
|
74
|
+
"claude.cmdNew": "Nueva sesión",
|
|
75
|
+
"claude.cmdHelp": "Mostrar ayuda",
|
|
76
|
+
"claude.errNoRelay": "No hay URL de relay configurada: inyecte un valor con --env o sobrescríbalo con TUNNELBOX_RELAY_URL",
|
|
77
|
+
"claude.logConnected": "Conectado al relay {url}",
|
|
78
|
+
"claude.logMsgUncaught": "Excepción no capturada al procesar el mensaje: {message}",
|
|
79
|
+
"claude.reasonDisconnect": "Relay desconectado (rechazo automático fail-closed)",
|
|
80
|
+
"claude.reasonUnbind": "Cuenta desvinculada (rechazo automático fail-closed)",
|
|
81
|
+
"claude.logDisconnected": "Desconectado del relay, reconectando automáticamente…",
|
|
82
|
+
"claude.logPairCode": "Código de emparejamiento generado: {code}",
|
|
83
|
+
"claude.logUnhandledType": "Tipo de mensaje no manejado: {type}",
|
|
84
|
+
"claude.logHandleFailed": "No se pudo procesar {type}: {message}",
|
|
85
|
+
"claude.newSessionTitle": "Nueva sesión",
|
|
86
|
+
"claude.helpText": "Comandos compatibles:\n- /new nueva sesión\n- /help mostrar ayuda",
|
|
87
|
+
"claude.logPromptFailed": "session.prompt falló: {message}",
|
|
88
|
+
"claude.logAbortSent": "Se envió la interrupción (session={session})",
|
|
89
|
+
"claude.logAbortFailed": "Error al interrumpir (session={session}): {message}",
|
|
90
|
+
"claude.errBadWorkspaceEmpty": "Falta la ruta del espacio de trabajo",
|
|
91
|
+
"claude.errBadWorkspaceNotDir": "El directorio no existe o no se puede usar",
|
|
92
|
+
"claude.logWorkspaceSwitched": "Espacio de trabajo cambiado: {path}",
|
|
93
|
+
"claude.logUnknownQuestionReply": "Respuesta de pregunta estructurada sin coincidencia (id={id})",
|
|
94
|
+
"claude.logFlushedQuestions": "{count} pregunta(s) pendiente(s) cancelada(s): {reason}",
|
|
95
|
+
"claude.logFlushedApprovals": "{count} solicitud(es) pendiente(s) rechazada(s): {reason}",
|
|
96
|
+
"claude.logPendingResent": "session.pending: se reenviaron {count} elemento(s) pendiente(s) de {session}",
|
|
97
|
+
"claude.logSetModeFailed": "setPermissionMode falló (session={session}): {message}",
|
|
98
|
+
"claude.errWorkspaceMissing": "El espacio de trabajo no existe: {dir}",
|
|
99
|
+
"claude.logSessionError": "Error de sesión (session={session}): {message}",
|
|
100
|
+
"claude.logOfflineDenyTool": "Relay sin conexión, rechazo automático de la herramienta {tool}",
|
|
101
|
+
"claude.errOfflineDeny": "Relay sin conexión, rechazo automático (fail-closed)",
|
|
102
|
+
"claude.logAuqDisabled": "AskUserQuestion deshabilitado (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), rechazo automático",
|
|
103
|
+
"claude.errAuqDisabled": "AskUserQuestion no está habilitado",
|
|
104
|
+
"claude.logAuqParseFailed": "No se pudo analizar la entrada de AskUserQuestion, rechazo automático (fail-closed)",
|
|
105
|
+
"claude.errAuqParse": "No se pudieron analizar las preguntas",
|
|
106
|
+
"claude.logAuqSkipped": "AskUserQuestion sin respuesta/cancelada (session={session})",
|
|
107
|
+
"claude.errAuqCancelled": "El usuario no seleccionó (cancelado)",
|
|
108
|
+
"claude.logAuqDone": "AskUserQuestion respondida (session={session})",
|
|
109
|
+
"claude.promptRunTool": "Claude Code solicita ejecutar {tool}",
|
|
110
|
+
"claude.errApprovalTimeout": "Tiempo de aprobación agotado, rechazo automático (fail-closed)",
|
|
111
|
+
"claude.errUserDenied": "Rechazado por el usuario",
|
|
112
|
+
"claude.errAborted": "Solicitud interrumpida",
|
|
113
|
+
"claude.logPermToPhone": "Solicitud de permiso (tool={tool}) → enviada al teléfono permissionID={id}",
|
|
114
|
+
"claude.errRelayUnreachable": "Relay inaccesible, rechazo automático (fail-closed)",
|
|
115
|
+
"claude.logQuestionOffline": "Relay sin conexión, pregunta estructurada cancelada automáticamente",
|
|
116
|
+
"claude.logQuestionToPhone": "Pregunta estructurada ({count}) → enviada al teléfono questionID={id}",
|
|
117
|
+
"claude.logDialogOffline": "Relay sin conexión, diálogo cancelado automáticamente ({tool})",
|
|
118
|
+
"claude.logDialogToPhone": "Solicitud de diálogo (kind={kind} tool={tool}) → enviada al teléfono permissionID={id}",
|
|
119
|
+
"claude.logAuqDialogParse": "No se pudo analizar el payload de AskUserQuestion; se mantiene el comportamiento predeterminado (session={session})",
|
|
120
|
+
"claude.logDialogUnmapped": "request_user_dialog(kind={kind}) sin correspondencia, se mantiene el comportamiento predeterminado (session={session})",
|
|
121
|
+
"claude.promptMcpAuth": "MCP «{server}» solicita autorización",
|
|
122
|
+
"claude.logElicitUnmapped": "Elicitación MCP (server={server}, mode={mode}) no manejada, rechazo automático (session={session})",
|
|
123
|
+
"claude.logResetIdentity": "Cuenta desvinculada; restableciendo identidad y generando un nuevo código de emparejamiento…",
|
|
124
|
+
"claude.dialogConfirm": "Claude Code solicita confirmación ({kind})",
|
|
125
|
+
"claude.resultTruncated": "… (resultado truncado)",
|
|
126
|
+
"claude.streamError": "error de streaming de claude",
|
|
127
|
+
"claude.errListSessions": "No se pudo leer la lista de sesiones de Claude",
|
|
128
|
+
"claude.errReadHistory": "No se pudo leer el historial de la sesión ({id})",
|
|
129
|
+
"setup.langSet": "Idioma de ejecución establecido en",
|
|
130
|
+
"setup.langHint": "El adaptador emitirá en este idioma tras reiniciar (TUNNELBOX_LANG puede sobrescribirlo en tiempo de ejecución). Archivo de estado:",
|
|
131
|
+
"setup.langCurrent": "Idioma de ejecución actual",
|
|
132
|
+
"hermes.errNoRelay": "URL del relé no configurada: use --env para inyectar un valor predeterminado o sobrescríbalo en tiempo de ejecución con TUNNELBOX_RELAY_URL",
|
|
133
|
+
"hermes.logConnected": "Conectado al relé {url}",
|
|
134
|
+
"hermes.logMsgUncaught": "Excepción no capturada al procesar el mensaje: {message}",
|
|
135
|
+
"hermes.logDisconnected": "Desconectado del relé, reconectando automáticamente…",
|
|
136
|
+
"hermes.logPairCode": "Código de emparejamiento generado: {code}",
|
|
137
|
+
"hermes.logUnhandledType": "Tipo de mensaje no procesado: {type}",
|
|
138
|
+
"hermes.logHandleFailed": "Error al procesar {type}: {message}",
|
|
139
|
+
"hermes.logClaimed": "Vinculado a su cuenta de teléfono. El teléfono se conecta ahora directamente desde Mis computadoras",
|
|
140
|
+
"hermes.logResetIdentity": "Desvinculado de la cuenta; restableciendo identidad y generando un nuevo código de emparejamiento…",
|
|
141
|
+
"hermes.cmdNew": "Nueva sesión",
|
|
142
|
+
"hermes.cmdHelp": "Mostrar ayuda",
|
|
143
|
+
"hermes.newSessionTitle": "Nueva sesión",
|
|
144
|
+
"hermes.helpText": "Comandos admitidos:\n- /new nueva sesión\n- /help mostrar ayuda",
|
|
145
|
+
"hermes.errBusy": "Esta sesión se está generando; espere a que termine o deténgala primero",
|
|
146
|
+
"hermes.errBadWorkspace": "Este directorio no existe o no se puede usar",
|
|
147
|
+
"hermes.logWorkspaceSwitched": "Espacio de trabajo cambiado: {path}",
|
|
148
|
+
"hermes.errWorkspaceMissing": "El espacio de trabajo no existe: {dir}",
|
|
149
|
+
"hermes.errStartFailed": "Error al iniciar: {message}",
|
|
150
|
+
"hermes.msgStarted": "Adaptador de Hermes iniciado (Ctrl+C para salir)",
|
|
151
|
+
"hermes.logAbortSent": "Interrupción enviada (session={session})",
|
|
152
|
+
"hermes.logPromptFailed": "session.prompt falló: {message}",
|
|
153
|
+
"hermes.logTurnError": "Error de turno (session={session}): {message}",
|
|
154
|
+
"hermes.logPairForced": "--pair: solicitud forzada del código de emparejamiento (solo esta ejecución)",
|
|
155
|
+
"hermes.pairingStillClaimed": "Ya vinculado a una cuenta de teléfono: este código solo sirve para reemparejar un nuevo dispositivo en la misma cuenta; el dispositivo actual se conecta directamente desde Mis computadoras",
|
|
156
|
+
"hermes.logPairNoRelay": "No se puede solicitar un código de emparejamiento: no hay URL de relé configurada",
|
|
157
|
+
"hermes.errSpawnHermes": "No se puede iniciar Hermes ({bin}): confirme que está instalado ({err})",
|
|
158
|
+
"hermes.errHermesExit": "hermes salió ({code}): {err}",
|
|
159
|
+
"hermes.logSessionUpdated": "Sesión actualizada (session={session})",
|
|
160
|
+
"hermes.errNoInject": "Inyección de mensaje del teléfono no disponible (sesión no interactiva o proceso no listo)",
|
|
161
|
+
"hermes.pairNoRelay": "No se puede alcanzar el relé (relé inaccesible o websockets ausente)",
|
|
162
|
+
"hermes.pairTimeout": "Tiempo de espera agotado al solicitar el código de emparejamiento (relé sin respuesta)",
|
|
163
|
+
"hermes.errToolPair": "fallo de tunnelbox_pair: {err}",
|
|
164
|
+
"hermes.errToolStatus": "fallo de tunnelbox_status: {err}",
|
|
165
|
+
"hermes.cliUsage": "Uso: /tunnelbox <pair|status>\n pair solicitar e imprimir un código de emparejamiento\n status mostrar estado de relé/enlace/conexión",
|
|
166
|
+
"qr.validFor": "El código de emparejamiento es válido durante unos 10 minutos; si caduca, obtenga uno nuevo en su computadora.",
|
|
167
|
+
"pair.toolDesc": "Muestra la información de emparejamiento telefónico de esta computadora (código de emparejamiento y código QR escaneable). Llamar cuando el usuario pregunte sobre emparejamiento, escaneo de QR o controlar esta computadora desde el teléfono.",
|
|
168
|
+
"pair.toolRefreshDesc": "Si se debe solicitar un nuevo código de emparejamiento al relé",
|
|
169
|
+
"state.errSaveState": "No se pudo guardar el estado",
|
|
170
|
+
"adapter.logConnected": "Conectado al relé {url}",
|
|
171
|
+
"adapter.logDisconnected": "Desconectado del relé, reconectando automáticamente…",
|
|
172
|
+
"adapter.logPairCode": "Código de emparejamiento generado: {code}",
|
|
173
|
+
"adapter.logClaimed": "Vinculado a su cuenta de teléfono. A partir de ahora el teléfono se conecta directamente desde «Mis computadoras»",
|
|
174
|
+
"adapter.logResetIdentity": "Desvinculado de la cuenta; restableciendo identidad y generando un nuevo código de emparejamiento…",
|
|
175
|
+
"adapter.logUnhandledType": "Tipo de mensaje no gestionado: {type}",
|
|
176
|
+
"adapter.errNoRelay": "No hay URL de relé configurada: compile con --env para inyectar un valor predeterminado, o sobrescríbala en tiempo de ejecución con TUNNELBOX_RELAY_URL",
|
|
177
|
+
"adapter.errBusy": "Esta sesión sigue en ejecución; espere a que termine o deténgala primero",
|
|
178
|
+
"adapter.errBadWorkspaceEmpty": "Falta la ruta del espacio de trabajo",
|
|
179
|
+
"adapter.errBadWorkspaceNotDir": "El directorio no existe o no es utilizable",
|
|
180
|
+
"adapter.errWorkspaceMissing": "El espacio de trabajo no existe: {dir}",
|
|
181
|
+
"adapter.cmdNew": "Nueva sesión",
|
|
182
|
+
"adapter.cmdHelp": "Mostrar ayuda",
|
|
183
|
+
"adapter.helpText": "Comandos admitidos:\n- /new nueva sesión\n- /help mostrar ayuda",
|
|
184
|
+
"adapter.newSessionTitle": "Nueva sesión",
|
|
185
|
+
"install.langHelpTitle": "Idiomas admitidos por install-local (--lang <tag>):",
|
|
186
|
+
"install.langHelpExample": "Ejemplo: npm run install-local -- --lang de-DE",
|
|
187
|
+
"install.unknownLang": "Idioma desconocido «{raw}», se usará en-US. Admitidos: {list}",
|
|
188
|
+
"hermes.errAskRequired": "question es obligatorio",
|
|
189
|
+
"hermes.msgPhoneUnavailable": "Teléfono no disponible o sin respuesta: use el clarify integrado para preguntar localmente, o decida por su cuenta.",
|
|
190
|
+
"hermes.errClarifyUnavailable": "Compatibilidad con clarify no disponible",
|
|
191
|
+
"hermes.errAskFailed": "tunnelbox_ask falló: {err}",
|
|
192
|
+
"hermes.errClarifyFailed": "clarify falló: {err}",
|
|
193
|
+
"bin.denied": "Rechazado desde su teléfono",
|
|
194
|
+
"bin.timeout": "Aprobación agotada (fail-closed)",
|
|
195
|
+
"bin.reqRun": "Claude Code solicita ejecutar {tool}",
|
|
196
|
+
"bin.pairTitle": "Emparejamiento telefónico tunnelbox",
|
|
197
|
+
"bin.pairCodeLine": " Código de emparejamiento: {code}",
|
|
198
|
+
"bin.pairHint": "Abra la app tunnelbox, toque «Escanear para emparejar» y escanee el código QR, o introduzca el código de emparejamiento manualmente (un solo uso).",
|
|
199
|
+
"bin.pairWritten": " Información de emparejamiento escrita en: {path}",
|
|
200
|
+
"bin.pairRequestFailed": "No se pudo solicitar un código de emparejamiento al relé.",
|
|
201
|
+
"bin.alreadyClaimed": "Esta computadora ya está vinculada a una cuenta de teléfono; conéctese directamente desde «Mis computadoras». Para volver a emparejar, desvincúlela primero en el teléfono.",
|
|
202
|
+
"bin.noRelay": "No hay URL de relé configurada: defina TUNNELBOX_RELAY_URL e inténtelo de nuevo.",
|
|
203
|
+
"bin.connectFailed": "No se puede conectar al relé: {relay}\nDefina TUNNELBOX_RELAY_URL o configúrelo en el archivo de estado de official-plugin.",
|
|
204
|
+
"bin.statusRelay": "Relé: {value}",
|
|
205
|
+
"bin.statusAgent": "ID del agente: {value}",
|
|
206
|
+
"bin.statusClaimed": "Teléfono vinculado: {value}",
|
|
207
|
+
"bin.statusStateFile": "Archivo de estado: {value}",
|
|
208
|
+
"bin.statusLatest": "Última información de emparejamiento:",
|
|
209
|
+
"bin.usage": "Uso: tunnelbox <pair|status|ask>",
|
|
210
|
+
"bin.usagePair": " pair solicitar e imprimir un código de emparejamiento",
|
|
211
|
+
"bin.usageStatus": " status mostrar estado del relé/vinculación",
|
|
212
|
+
"bin.usageAsk": " ask reenviar una aprobación de herramienta al teléfono",
|
|
213
|
+
"adapter.logMsgUncaught": "Excepción no capturada al procesar el mensaje: {message}",
|
|
214
|
+
"adapter.logHandleFailed": "Error al procesar {type}: {message}",
|
|
215
|
+
"adapter.logPromptFailed": "session.prompt falló: {message}",
|
|
216
|
+
"adapter.logAbortSent": "Cancelación enviada (session={session})",
|
|
217
|
+
"adapter.errUserDenied": "Rechazado por el usuario",
|
|
218
|
+
"adapter.logPendingResent": "session.pending: {count} solicitud(es) pendiente(s) reenviada(s)",
|
|
219
|
+
"adapter.logWorkspaceSwitched": "Espacio de trabajo cambiado: {path}",
|
|
220
|
+
"adapter.logNewSession": "Nueva sesión guardada codexId={codexId} (alias={session})",
|
|
221
|
+
"adapter.logSessionError": "Error de turno (session={session}): {message}",
|
|
222
|
+
"adapter.logDshSent": "Enviado a dsh (session={session})",
|
|
223
|
+
"adapter.logReadHistoryFailed": "Error al leer el historial de sesión ({session}): {message}",
|
|
224
|
+
"adapter.logAnswererInitFailed": "Error al inicializar el respondedor: {message}",
|
|
225
|
+
"adapter.logRemoteMode": "Modo de visualización dual: selecciones/aprobaciones usan difusión multicliente typert; teléfono y dsh web comparten la vista, gana la primera respuesta",
|
|
226
|
+
"adapter.logRemoteProbeFailed": "Falló la detección de la fuente de eventos remota typert; se usará el modo de respuesta local: {message}",
|
|
227
|
+
"adapter.logLocalMode": "Modo de respuesta local: selecciones/aprobaciones respondidas por el teléfono (headless, sin difusión de dsh web)",
|
|
228
|
+
"adapter.logRemoteStreamInterrupted": "Flujo remote events interrumpido: {message}",
|
|
229
|
+
"adapter.logResultRejected": "$events/result no aceptado ({eventId}): {message}",
|
|
230
|
+
"adapter.logResultBackfillFailed": "Error al rellenar $events/result ({eventId}): {message}",
|
|
231
|
+
"adapter.logRemoteQuestion": "Difusión de pregunta remote → tarjeta de pregunta del teléfono questionID={id} (session={session})",
|
|
232
|
+
"adapter.errRemoteReadyFrame": "Primer fotograma de remote events inesperado",
|
|
233
|
+
"adapter.logRemoteApproval": "Difusión de aprobación remote → tarjeta de permiso del teléfono permissionID={id} (session={session})",
|
|
234
|
+
"adapter.logUserQuestionRoute": "Selección de user-questions → enrutada a session={session}",
|
|
235
|
+
"adapter.errDshQuestionEmpty": "El contenido de la pregunta de dsh está vacío",
|
|
236
|
+
"adapter.errQuestionTimeout": "Pregunta agotada ({seconds}s), cancelada",
|
|
237
|
+
"adapter.errQuestionCancelledAbort": "Pregunta cancelada (agente abortado)",
|
|
238
|
+
"adapter.errQuestionCancelledRelay": "Relé inaccesible, pregunta cancelada",
|
|
239
|
+
"adapter.logQuestionToPhone": "Selección de user-questions → enviada a la tarjeta de pregunta del teléfono questionID={id} (session={session})",
|
|
240
|
+
"adapter.errQuestionUserCancelled": "El usuario canceló/rechazó la pregunta en el teléfono",
|
|
241
|
+
"adapter.logApprovalRequest": "Solicitud de aprobación (tool={tool}) → enviada a la tarjeta de permiso del teléfono permissionID={id}",
|
|
242
|
+
"adapter.logAgentPresetFailed": "Error al resolver agentPreset ({preset}); se usará sin preset: {message}",
|
|
243
|
+
"adapter.logSessionLiveAdopted": "La sesión {session} ya está retenida por otro agente de este proceso (live); se adopta el agente existente para continuar: {message}",
|
|
244
|
+
"adapter.logDisposeSkipped": "El agente live externo adoptado no ejecuta dispose (la sesión {session} la gestiona su titular original)",
|
|
245
|
+
"adapter.logAgentCreateFailed": "Error al crear/reanudar el agente ({session}): {message}",
|
|
246
|
+
"adapter.errSessionBusyLive": "La sesión {session} está ocupada (live); inténtelo más tarde",
|
|
247
|
+
"adapter.errAgentsUnavailable": "Servicio agents no disponible",
|
|
248
|
+
"adapter.logToolReason": "dsh solicita ejecutar la herramienta {tool}",
|
|
249
|
+
"adapter.logGatewayConnected": "Conectado al Gateway OpenClaw local ({version})",
|
|
250
|
+
"adapter.logGatewayDisconnected": "Desconectado del Gateway OpenClaw; el cliente oficial se está reconectando…",
|
|
251
|
+
"adapter.logGatewayConnectFailed": "No se puede conectar al Gateway OpenClaw local (la primera vez, apruebe el dispositivo localmente: `openclaw devices list` + `openclaw devices approve <requestId>`)",
|
|
252
|
+
"adapter.errGatewayNoSessionKey": "El Gateway no devolvió una clave de sesión",
|
|
253
|
+
"adapter.logDeleteSessionFailed": "Error al eliminar la sesión ({session}): {message} (se confirma como eliminada igualmente)",
|
|
254
|
+
"adapter.logApprovalReplyFailed": "Error en la respuesta de aprobación ({id}): {message}",
|
|
255
|
+
"adapter.logPendingApproval": "session.pending: {count} aprobación(es) pendiente(s) reenviada(s) (session={session})",
|
|
256
|
+
"adapter.workspaceDefault": "Predeterminado",
|
|
257
|
+
"adapter.cursorSessionTitle": "Sesión de Cursor",
|
|
258
|
+
"adapter.reasonDisconnect": "Relé desconectado, rechazo automático (fail-closed)",
|
|
259
|
+
"adapter.warnInvalidEnv": "Se ignora {name} no válido: {raw} ({list})",
|
|
260
|
+
"adapter.errStartFailed": "Error al iniciar:",
|
|
261
|
+
"adapter.msgStarted": "Adaptador {name} iniciado (Ctrl+C para salir)",
|
|
262
|
+
"adapter.warnCliMissing": "Ejecutable «{bin}» no encontrado; instálelo (p. ej. npm i -g @openai/codex) o defina TUNNELBOX_CODEX_BIN con su ruta",
|
|
263
|
+
"adapter.errCliNotFound": "Ejecutable {name} «{bin}» no encontrado: instale el Codex CLI (npm i -g @openai/codex) o defina TUNNELBOX_CODEX_BIN",
|
|
264
|
+
"adapter.errSessionNotFound": "Sesión no encontrada o ya eliminada",
|
|
265
|
+
"adapter.checkHeader": "Comprobación del entorno de tunnelbox-codex",
|
|
266
|
+
"adapter.checkCliOk": "Ejecutable {name}: {path}",
|
|
267
|
+
"adapter.checkCliMissing": "Ejecutable {name} no encontrado ({bin})",
|
|
268
|
+
"bin.yes": "sí",
|
|
269
|
+
"bin.no": "no",
|
|
270
|
+
"adapter.errAppServerSpawn": "No se pudo iniciar codex app-server: {message} (comprueba que tu Codex CLI admita `codex app-server`)",
|
|
271
|
+
"adapter.errAppServerExit": "codex app-server se cerró; las aprobaciones/elecciones pendientes se rechazaron automáticamente",
|
|
272
|
+
"adapter.logUnsupportedServerRequest": "solicitud de app-server no admitida: {method}",
|
|
273
|
+
"adapter.logQuestionNative": "solicitud de elección -> tarjeta de elección del teléfono questionID={id} (session={session})",
|
|
274
|
+
"adapter.logPermissionNative": "solicitud de aprobación -> tarjeta de aprobación del teléfono permissionID={id} (session={session})",
|
|
275
|
+
"adapter.checkAppServerOk": "codex app-server disponible",
|
|
276
|
+
"adapter.checkAppServerMissing": "este Codex CLI no admite `codex app-server` (actualiza Codex CLI)",
|
|
277
|
+
"adapter.warnCursorCliMissing": "No se encontró el ejecutable de Cursor CLI \"{bin}\"; instálalo (https://cursor.com/docs/cli) o define TUNNELBOX_CURSOR_BIN",
|
|
278
|
+
"adapter.checkCursorCliMissing": "No se encontró el ejecutable de Cursor CLI ({bin}); instálalo desde https://cursor.com/docs/cli",
|
|
279
|
+
"adapter.checkCursorAcpHint": "Cursor CLI detectado; se usará el modo ACP (`agent acp`) para streaming/aprobación/selección",
|
|
280
|
+
"adapter.errAcpSpawn": "No se pudo iniciar cursor `agent acp`: {message} (comprueba que tu Cursor CLI admita `agent acp`)",
|
|
281
|
+
"adapter.errAcpNoSession": "Cursor ACP no devolvió un id de sesión",
|
|
282
|
+
"adapter.logResumeFailed": "Falló la reanudación de la sesión; se inicia una nueva sesión: {message}",
|
|
283
|
+
"adapter.logPlanNative": "aprobación de plan -> tarjeta de aprobación del teléfono permissionID={id} (session={session})",
|
|
284
|
+
"adapter.errTimeout": "Tiempo de espera agotado, rechazo automático (fail-closed)",
|
|
285
|
+
"adapter.planApprovalPrompt": "Cursor solicita aprobación de un plan",
|
|
286
|
+
"adapter.checkCursorHeader": "comprobación de entorno de tunnelbox-cursor",
|
|
287
|
+
"adapter.errAskBridge": "No se pudo iniciar el puente ask: {message}",
|
|
288
|
+
"adapter.logAskBridge": "Puente MCP ask escuchando en {url}",
|
|
289
|
+
"cursor.mcpAskDesc": "Pide al usuario que elija en su teléfono (tunnelbox) y bloquea hasta que responda. Úsalo siempre que el usuario deba elegir entre opciones antes de continuar (plato, modo, opción de plan…). Devuelve la(s) etiqueta(s) elegida(s).",
|
|
290
|
+
"cursor.mcpAskTitleDesc": "Título opcional mostrado en la tarjeta del teléfono",
|
|
291
|
+
"cursor.mcpAskQuestionsDesc": "Una o más preguntas; cada una tiene opciones",
|
|
292
|
+
"cursor.mcpPlanDesc": "Pide al usuario que apruebe un plan en su teléfono (tunnelbox) y bloquea hasta que responda. Indica si el plan fue aceptado.",
|
|
293
|
+
"cursor.mcpNoBridge": "el puente ask de tunnelbox no está disponible",
|
|
294
|
+
"cursor.mcpUnanswered": "El usuario no respondió en su teléfono (sin conexión o tiempo agotado). Continúa o pregunta en el chat.",
|
|
295
|
+
"cursor.mcpRejected": "El usuario rechazó la pregunta en su teléfono.",
|
|
296
|
+
"cursor.mcpAnswersHeader": "Respuestas del usuario (desde su teléfono):",
|
|
297
|
+
"cursor.mcpAccepted": "El usuario aceptó el plan.",
|
|
298
|
+
"cursor.mcpDenied": "El usuario rechazó el plan.",
|
|
299
|
+
"cursor.mcpPlanUnanswered": "El usuario no respondió al plan en su teléfono (sin conexión o tiempo agotado).",
|
|
300
|
+
"cursor.mcpAskNoQuestions": "No se proporcionaron preguntas.",
|
|
301
|
+
"cursor.mcpFailed": "falló tunnelbox ask",
|
|
302
|
+
"adapter.errCursorExitCode": "Cursor CLI finalizó con el código {code}",
|
|
303
|
+
"adapter.errCursorExit": "Cursor CLI finalizó ({code}): {err}",
|
|
304
|
+
"adapter.errCursorSpawn": "No se puede iniciar Cursor CLI (agent): comprueba que esté instalado y con sesión iniciada ({message})",
|
|
305
|
+
"adapter.errCursorStart": "Falló el inicio de Cursor CLI: {message}",
|
|
306
|
+
"adapter.errCursorGeneric": "Error de Cursor"
|
|
307
|
+
}
|