@tunnelbox/core 0.1.20 → 0.1.22

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.
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "Auswahlanfrage -> Auswahlkarte am Handy questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "Genehmigungsanfrage -> Genehmigungskarte am Handy permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server verfügbar",
276
- "adapter.checkAppServerMissing": "diese Codex CLI unterstützt `codex app-server` nicht (bitte Codex CLI aktualisieren)"
276
+ "adapter.checkAppServerMissing": "diese Codex CLI unterstützt `codex app-server` nicht (bitte Codex CLI aktualisieren)",
277
+ "adapter.warnCursorCliMissing": "Cursor-CLI-Programm \"{bin}\" nicht gefunden; installieren Sie es (https://cursor.com/docs/cli) oder setzen Sie TUNNELBOX_CURSOR_BIN",
278
+ "adapter.checkCursorCliMissing": "Cursor-CLI-Programm nicht gefunden ({bin}); installieren Sie es von https://cursor.com/docs/cli",
279
+ "adapter.checkCursorAcpHint": "Cursor CLI erkannt; der ACP-Modus (`agent acp`) wird für Streaming/Genehmigung/Auswahl verwendet",
280
+ "adapter.errAcpSpawn": "Start von cursor `agent acp` fehlgeschlagen: {message} (stellen Sie sicher, dass Ihre Cursor CLI `agent acp` unterstützt)",
281
+ "adapter.errAcpNoSession": "Cursor ACP hat keine Sitzungs-ID zurückgegeben",
282
+ "adapter.logResumeFailed": "Sitzungswiederaufnahme fehlgeschlagen, neue Sitzung wird gestartet: {message}",
283
+ "adapter.logPlanNative": "Plan-Genehmigung -> Genehmigungskarte am Handy permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "Zeitüberschreitung, automatisch abgelehnt (fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor fordert die Genehmigung eines Plans an",
286
+ "adapter.checkCursorHeader": "tunnelbox-cursor Umgebungsprüfung",
287
+ "adapter.errAskBridge": "Start der ask-Bridge fehlgeschlagen: {message}",
288
+ "adapter.logAskBridge": "MCP ask-Bridge lauscht auf {url}",
289
+ "cursor.mcpAskDesc": "Fordert den Nutzer auf, auf dem Handy (tunnelbox) zu wählen, und blockiert bis zur Antwort. Verwende dies, wann immer der Nutzer vor dem Fortfahren zwischen Optionen wählen muss (Gericht, Modus, Planoption …). Gibt die gewählten Optionsbezeichnungen zurück.",
290
+ "cursor.mcpAskTitleDesc": "Optionaler Titel auf der Handy-Karte",
291
+ "cursor.mcpAskQuestionsDesc": "Eine oder mehrere Fragen; jede bietet Optionen",
292
+ "cursor.mcpPlanDesc": "Fordert den Nutzer auf, einen Plan auf dem Handy (tunnelbox) zu genehmigen, und blockiert bis zur Antwort. Gibt zurück, ob der Plan akzeptiert wurde.",
293
+ "cursor.mcpNoBridge": "die tunnelbox ask-Bridge ist nicht verfügbar",
294
+ "cursor.mcpUnanswered": "Der Nutzer hat auf dem Handy nicht geantwortet (offline oder Zeitüberschreitung). Fahre fort oder frage im Chat.",
295
+ "cursor.mcpRejected": "Der Nutzer hat die Frage auf dem Handy abgelehnt.",
296
+ "cursor.mcpAnswersHeader": "Antworten des Nutzers (vom Handy):",
297
+ "cursor.mcpAccepted": "Der Nutzer hat den Plan akzeptiert.",
298
+ "cursor.mcpDenied": "Der Nutzer hat den Plan abgelehnt.",
299
+ "cursor.mcpPlanUnanswered": "Der Nutzer hat auf dem Handy nicht auf den Plan geantwortet (offline oder Zeitüberschreitung).",
300
+ "cursor.mcpAskNoQuestions": "Keine Fragen angegeben.",
301
+ "cursor.mcpFailed": "tunnelbox ask fehlgeschlagen",
302
+ "adapter.errCursorExitCode": "Cursor CLI beendet mit Code {code}",
303
+ "adapter.errCursorExit": "Cursor CLI beendet ({code}): {err}",
304
+ "adapter.errCursorSpawn": "Cursor CLI (agent) kann nicht gestartet werden: Stellen Sie sicher, dass es installiert und angemeldet ist ({message})",
305
+ "adapter.errCursorStart": "Start von Cursor CLI fehlgeschlagen: {message}",
306
+ "adapter.errCursorGeneric": "Cursor-Fehler",
307
+ "qr.downloadApp": "tunnelbox-App herunterladen (Android / iOS): {url}",
308
+ "adapter.logLegacyHookRemoved": "Alter PermissionRequest-Hook entfernt (hooks.json)",
309
+ "adapter.errAppServerNotRunning": "codex app-server läuft nicht",
310
+ "adapter.errAppServerTimeout": "Zeitüberschreitung bei app-server-Anfrage: {method}",
311
+ "adapter.errAppServerStopped": "app-server-Client gestoppt",
312
+ "adapter.errAppServerExited": "codex app-server beendet (code={code} signal={signal})",
313
+ "adapter.errAppServerError": "app-server-Fehler: {message}",
314
+ "adapter.logAppServerStderr": "app-server: {line}",
315
+ "adapter.logAppServerExited": "app-server beendet (code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "dsh-Generierungsfehler",
317
+ "adapter.unknown": "unbekannt",
318
+ "adapter.errGatewayClientMissing": "Gateway-Client nicht erstellt",
319
+ "adapter.errGatewayNotConnected": "Gateway nicht verbunden",
320
+ "adapter.sessionTitleWithId": "{name}-Sitzung {id}",
321
+ "adapter.promptApproveTool": "{name} fordert die Genehmigung zur Ausführung von {tool} an",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status}: {text}",
324
+ "claude.promptUrl": "URL: {url}",
325
+ "hermes.errBridgeNotRunning": "Bridge-Schleife läuft nicht",
326
+ "hermes.errAskNoQuestion": "Keine Frage angegeben. Übergeben Sie questions=[{question, choices?, multi_select?}, ...].",
327
+ "hermes.toolPairDesc": "Fordert einen einmaligen Telefon-Kopplungscode vom tunnelbox-Relay an (zum Scannen/Eingeben in der tunnelbox-App). Verwenden, wenn der Nutzer fragt, wie er sich verbindet/koppelt/scannt oder diesen Computer vom Telefon aus steuert.",
328
+ "hermes.toolPairRefreshDesc": "Erzwingt die Anforderung eines neuen Kopplungscodes (Standard: wiederverwenden/ignorieren)",
329
+ "hermes.toolStatusDesc": "Gibt den tunnelbox-Plugin-Status zurück: Relay-Adresse, Agent-ID, Bindung an ein Telefonkonto, Datenverzeichnis und letzte Kopplungsinfos. Verwenden, wenn der Nutzer nach Verbindungsstatus/Bindung/Relay-Adresse fragt.",
330
+ "hermes.toolAskDesc": "Sendet eine Frage/Auswahl an das tunnelbox-Telefon des Nutzers (Remote-UI) und wartet auf Auswahl oder Eingabe. Gibt JSON zurück: {answered: bool, user_response: string|string[]|null}. Ist das Telefon offline oder tritt eine Zeitüberschreitung auf, ist answered=false.",
331
+ "hermes.toolAskQuestionDesc": "Der zu stellende Fragetext",
332
+ "hermes.toolAskChoicesDesc": "Voreingestellte Optionen (optional; bis zu 4)",
333
+ "hermes.toolAskMultipleDesc": "Mehrfachauswahl zulassen (erfordert choices)",
334
+ "hermes.cmdDesc": "tunnelbox: Telefon-Kopplung / Verbindungsstatus",
335
+ "hermes.logConfigLoadFailed": "tunnelbox: Konfiguration konnte nicht gelesen werden, Standardwerte werden verwendet: {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox: Registrierung der Tools fehlgeschlagen: {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox: Registrierung des Befehls fehlgeschlagen: {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox: Registrierung der Skill fehlgeschlagen: {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox: Registrierung der Hooks fehlgeschlagen: {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox: Registrierung des Approval-Transports fehlgeschlagen: {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox: Registrierung von tunnelbox_ask fehlgeschlagen: {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox: Registrierung des System-Prompt-Abschnitts fehlgeschlagen: {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox: Start der Hintergrund-Bridge fehlgeschlagen: {err}",
344
+ "hermes.systemPromptAsk": "Wenn Sie eine Entscheidung, Klärung oder Auswahl vom Nutzer benötigen und ein tunnelbox-Telefon verbunden ist, verwenden Sie das Tool `tunnelbox_ask`, um auf dessen Telefon zu fragen, statt zu raten. Warten Sie auf die Antwort, bevor Sie fortfahren."
277
345
  }
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "choice request -> phone choice card questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "approval request -> phone approval card permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server available",
276
- "adapter.checkAppServerMissing": "this Codex CLI does not support `codex app-server` (please upgrade Codex CLI)"
276
+ "adapter.checkAppServerMissing": "this Codex CLI does not support `codex app-server` (please upgrade Codex CLI)",
277
+ "adapter.warnCursorCliMissing": "Cursor CLI executable \"{bin}\" not found; install it (https://cursor.com/docs/cli) or set TUNNELBOX_CURSOR_BIN to its path",
278
+ "adapter.checkCursorCliMissing": "Cursor CLI executable not found ({bin}); install it from https://cursor.com/docs/cli",
279
+ "adapter.checkCursorAcpHint": "Cursor CLI detected; ACP mode (`agent acp`) will provide streaming/approval/selection",
280
+ "adapter.errAcpSpawn": "Failed to start cursor `agent acp`: {message} (make sure your Cursor CLI supports `agent acp`)",
281
+ "adapter.errAcpNoSession": "Cursor ACP did not return a session id",
282
+ "adapter.logResumeFailed": "Session resume failed, starting a new session: {message}",
283
+ "adapter.logPlanNative": "plan approval -> phone approval card permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "Timed out, auto-rejected (fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor requests approval for a plan",
286
+ "adapter.checkCursorHeader": "tunnelbox-cursor environment check",
287
+ "adapter.errAskBridge": "Failed to start the ask bridge: {message}",
288
+ "adapter.logAskBridge": "MCP ask bridge listening at {url}",
289
+ "cursor.mcpAskDesc": "Ask the user to choose on their phone (tunnelbox) and block until they answer. Use this whenever you need the user to pick between options before continuing (e.g. choosing a dish, a mode, or a plan option). Returns the selected option label(s).",
290
+ "cursor.mcpAskTitleDesc": "Optional title shown on the phone card",
291
+ "cursor.mcpAskQuestionsDesc": "One or more questions; each has options for the user to pick",
292
+ "cursor.mcpPlanDesc": "Ask the user to approve a plan on their phone (tunnelbox) and block until they respond. Returns whether the plan was accepted.",
293
+ "cursor.mcpNoBridge": "tunnelbox ask bridge is not available",
294
+ "cursor.mcpUnanswered": "The user did not answer on their phone (offline or timed out). Proceed or ask conversationally.",
295
+ "cursor.mcpRejected": "The user rejected the question on their phone.",
296
+ "cursor.mcpAnswersHeader": "User's answers (from their phone):",
297
+ "cursor.mcpAccepted": "The user accepted the plan.",
298
+ "cursor.mcpDenied": "The user rejected the plan.",
299
+ "cursor.mcpPlanUnanswered": "The user did not respond to the plan on their phone (offline or timed out).",
300
+ "cursor.mcpAskNoQuestions": "No questions were provided.",
301
+ "cursor.mcpFailed": "tunnelbox ask failed",
302
+ "adapter.errCursorExitCode": "Cursor CLI exited with code {code}",
303
+ "adapter.errCursorExit": "Cursor CLI exited ({code}): {err}",
304
+ "adapter.errCursorSpawn": "Cannot start Cursor CLI (agent): make sure it is installed and logged in ({message})",
305
+ "adapter.errCursorStart": "Cursor CLI failed to start: {message}",
306
+ "adapter.errCursorGeneric": "Cursor error",
307
+ "qr.downloadApp": "Download the tunnelbox App (Android / iOS): {url}",
308
+ "adapter.logLegacyHookRemoved": "Removed the legacy PermissionRequest hook (hooks.json)",
309
+ "adapter.errAppServerNotRunning": "codex app-server is not running",
310
+ "adapter.errAppServerTimeout": "app-server request timed out: {method}",
311
+ "adapter.errAppServerStopped": "app-server client stopped",
312
+ "adapter.errAppServerExited": "codex app-server exited (code={code} signal={signal})",
313
+ "adapter.errAppServerError": "app-server error: {message}",
314
+ "adapter.logAppServerStderr": "app-server: {line}",
315
+ "adapter.logAppServerExited": "app-server exited (code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "dsh generation error",
317
+ "adapter.unknown": "unknown",
318
+ "adapter.errGatewayClientMissing": "gateway client not created",
319
+ "adapter.errGatewayNotConnected": "gateway not connected",
320
+ "adapter.sessionTitleWithId": "{name} session {id}",
321
+ "adapter.promptApproveTool": "{name} requests approval to run {tool}",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status}: {text}",
324
+ "claude.promptUrl": "URL: {url}",
325
+ "hermes.errBridgeNotRunning": "bridge loop is not running",
326
+ "hermes.errAskNoQuestion": "No question provided. Pass questions=[{question, choices?, multi_select?}, ...].",
327
+ "hermes.toolPairDesc": "Request a one-time phone pairing code from the tunnelbox relay (for scanning/entering in the tunnelbox app). Use when the user asks how to connect/pair/scan or remotely control this machine from their phone.",
328
+ "hermes.toolPairRefreshDesc": "Force requesting a new pairing code (default: reuse/ignore)",
329
+ "hermes.toolStatusDesc": "Return tunnelbox plugin status: relay address, agent id, whether bound to a phone account, data directory, and latest pairing info. Use when the user asks about the phone connection status/binding/relay address.",
330
+ "hermes.toolAskDesc": "Send a question/choice to the user's tunnelbox phone (remote UI) and wait for their selection or input. Returns JSON: {answered: bool, user_response: string|string[]|null}. If the phone is offline or times out, answered=false.",
331
+ "hermes.toolAskQuestionDesc": "The question text to ask",
332
+ "hermes.toolAskChoicesDesc": "Preset options (optional; up to 4)",
333
+ "hermes.toolAskMultipleDesc": "Allow multiple selection (requires choices)",
334
+ "hermes.cmdDesc": "tunnelbox: phone pairing / connection status",
335
+ "hermes.logConfigLoadFailed": "tunnelbox: failed to read config, using defaults: {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox: failed to register tools: {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox: failed to register command: {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox: failed to register skill: {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox: failed to register hooks: {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox: failed to register approval transport: {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox: failed to register tunnelbox_ask: {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox: failed to register system prompt section: {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox: background bridge failed to start: {err}",
344
+ "hermes.systemPromptAsk": "When you need a decision, clarification, or choice from the user and a tunnelbox phone is attached, use the `tunnelbox_ask` tool to ask on their phone instead of guessing. Wait for their answer before proceeding."
277
345
  }
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "solicitud de elección -> tarjeta de elección del teléfono questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "solicitud de aprobación -> tarjeta de aprobación del teléfono permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server disponible",
276
- "adapter.checkAppServerMissing": "este Codex CLI no admite `codex app-server` (actualiza Codex CLI)"
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
+ "qr.downloadApp": "Descarga la app tunnelbox (Android / iOS): {url}",
308
+ "adapter.logLegacyHookRemoved": "Se eliminó el hook PermissionRequest antiguo (hooks.json)",
309
+ "adapter.errAppServerNotRunning": "codex app-server no está en ejecución",
310
+ "adapter.errAppServerTimeout": "Se agotó el tiempo de la solicitud a app-server: {method}",
311
+ "adapter.errAppServerStopped": "Cliente app-server detenido",
312
+ "adapter.errAppServerExited": "codex app-server finalizó (code={code} signal={signal})",
313
+ "adapter.errAppServerError": "Error de app-server: {message}",
314
+ "adapter.logAppServerStderr": "app-server: {line}",
315
+ "adapter.logAppServerExited": "app-server finalizó (code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "Error de generación de dsh",
317
+ "adapter.unknown": "desconocido",
318
+ "adapter.errGatewayClientMissing": "Cliente de gateway no creado",
319
+ "adapter.errGatewayNotConnected": "Gateway no conectado",
320
+ "adapter.sessionTitleWithId": "sesión de {name} {id}",
321
+ "adapter.promptApproveTool": "{name} solicita aprobación para ejecutar {tool}",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status}: {text}",
324
+ "claude.promptUrl": "URL: {url}",
325
+ "hermes.errBridgeNotRunning": "El bucle de bridge no está en ejecución",
326
+ "hermes.errAskNoQuestion": "No se proporcionó ninguna pregunta. Pasa questions=[{question, choices?, multi_select?}, ...].",
327
+ "hermes.toolPairDesc": "Solicita un código de emparejamiento telefónico de un solo uso al relé tunnelbox (para escanear/introducir en la app tunnelbox). Úsalo cuando el usuario pregunte cómo conectar/emparejar/escanear o controlar este equipo desde el teléfono.",
328
+ "hermes.toolPairRefreshDesc": "Forzar la solicitud de un nuevo código de emparejamiento (por defecto: reutilizar/ignorar)",
329
+ "hermes.toolStatusDesc": "Devuelve el estado del plugin tunnelbox: dirección del relé, id del agente, si está vinculado a una cuenta de teléfono, directorio de datos e información de emparejamiento reciente. Úsalo cuando el usuario pregunte por el estado de conexión/vinculación/dirección del relé.",
330
+ "hermes.toolAskDesc": "Envía una pregunta/opción al teléfono tunnelbox del usuario (UI remota) y espera su selección o entrada. Devuelve JSON: {answered: bool, user_response: string|string[]|null}. Si el teléfono está desconectado o se agota el tiempo, answered=false.",
331
+ "hermes.toolAskQuestionDesc": "El texto de la pregunta a realizar",
332
+ "hermes.toolAskChoicesDesc": "Opciones predefinidas (opcional; hasta 4)",
333
+ "hermes.toolAskMultipleDesc": "Permitir selección múltiple (requiere choices)",
334
+ "hermes.cmdDesc": "tunnelbox: emparejamiento telefónico / estado de conexión",
335
+ "hermes.logConfigLoadFailed": "tunnelbox: no se pudo leer la configuración, usando valores por defecto: {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox: falló el registro de herramientas: {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox: falló el registro del comando: {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox: falló el registro de la skill: {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox: falló el registro de los hooks: {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox: falló el registro del transporte de aprobación: {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox: falló el registro de tunnelbox_ask: {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox: falló el registro de la sección del prompt del sistema: {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox: falló el inicio del puente en segundo plano: {err}",
344
+ "hermes.systemPromptAsk": "Cuando necesites una decisión, aclaración o elección del usuario y haya un teléfono tunnelbox vinculado, usa la herramienta `tunnelbox_ask` para preguntar en su teléfono en lugar de adivinar. Espera su respuesta antes de continuar."
277
345
  }
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "demande de choix -> carte de choix du téléphone questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "demande d'approbation -> carte d'approbation du téléphone permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server disponible",
276
- "adapter.checkAppServerMissing": "ce Codex CLI ne prend pas en charge `codex app-server` (veuillez mettre à jour Codex CLI)"
276
+ "adapter.checkAppServerMissing": "ce Codex CLI ne prend pas en charge `codex app-server` (veuillez mettre à jour Codex CLI)",
277
+ "adapter.warnCursorCliMissing": "Exécutable Cursor CLI « {bin} » introuvable ; installez-le (https://cursor.com/docs/cli) ou définissez TUNNELBOX_CURSOR_BIN",
278
+ "adapter.checkCursorCliMissing": "Exécutable Cursor CLI introuvable ({bin}) ; installez-le depuis https://cursor.com/docs/cli",
279
+ "adapter.checkCursorAcpHint": "Cursor CLI détecté ; le mode ACP (`agent acp`) sera utilisé pour le streaming/l'approbation/la sélection",
280
+ "adapter.errAcpSpawn": "Échec du démarrage de cursor `agent acp` : {message} (vérifiez que votre Cursor CLI prend en charge `agent acp`)",
281
+ "adapter.errAcpNoSession": "Cursor ACP n'a pas renvoyé d'id de session",
282
+ "adapter.logResumeFailed": "Échec de la reprise de session, démarrage d'une nouvelle session : {message}",
283
+ "adapter.logPlanNative": "approbation de plan -> carte d'approbation du téléphone permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "Délai dépassé, rejet automatique (fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor demande l'approbation d'un plan",
286
+ "adapter.checkCursorHeader": "vérification de l'environnement tunnelbox-cursor",
287
+ "adapter.errAskBridge": "Échec du démarrage du pont ask : {message}",
288
+ "adapter.logAskBridge": "Pont MCP ask à l'écoute sur {url}",
289
+ "cursor.mcpAskDesc": "Demande à l'utilisateur de choisir sur son téléphone (tunnelbox) et bloque jusqu'à sa réponse. À utiliser chaque fois que l'utilisateur doit choisir entre des options avant de continuer (plat, mode, option de plan…). Renvoie le(s) libellé(s) choisi(s).",
290
+ "cursor.mcpAskTitleDesc": "Titre facultatif affiché sur la carte du téléphone",
291
+ "cursor.mcpAskQuestionsDesc": "Une ou plusieurs questions ; chacune propose des options",
292
+ "cursor.mcpPlanDesc": "Demande à l'utilisateur d'approuver un plan sur son téléphone (tunnelbox) et bloque jusqu'à sa réponse. Indique si le plan a été accepté.",
293
+ "cursor.mcpNoBridge": "le pont ask tunnelbox n'est pas disponible",
294
+ "cursor.mcpUnanswered": "L'utilisateur n'a pas répondu sur son téléphone (hors ligne ou délai dépassé). Continuez ou posez la question en conversation.",
295
+ "cursor.mcpRejected": "L'utilisateur a rejeté la question sur son téléphone.",
296
+ "cursor.mcpAnswersHeader": "Réponses de l'utilisateur (depuis son téléphone) :",
297
+ "cursor.mcpAccepted": "L'utilisateur a accepté le plan.",
298
+ "cursor.mcpDenied": "L'utilisateur a rejeté le plan.",
299
+ "cursor.mcpPlanUnanswered": "L'utilisateur n'a pas répondu au plan sur son téléphone (hors ligne ou délai dépassé).",
300
+ "cursor.mcpAskNoQuestions": "Aucune question fournie.",
301
+ "cursor.mcpFailed": "échec de tunnelbox ask",
302
+ "adapter.errCursorExitCode": "Cursor CLI s'est arrêté avec le code {code}",
303
+ "adapter.errCursorExit": "Cursor CLI arrêté ({code}) : {err}",
304
+ "adapter.errCursorSpawn": "Impossible de démarrer Cursor CLI (agent) : vérifiez qu'il est installé et connecté ({message})",
305
+ "adapter.errCursorStart": "Échec du démarrage de Cursor CLI : {message}",
306
+ "adapter.errCursorGeneric": "Erreur Cursor",
307
+ "qr.downloadApp": "Télécharger l'application tunnelbox (Android / iOS) : {url}",
308
+ "adapter.logLegacyHookRemoved": "Ancien hook PermissionRequest supprimé (hooks.json)",
309
+ "adapter.errAppServerNotRunning": "codex app-server n'est pas en cours d'exécution",
310
+ "adapter.errAppServerTimeout": "Délai dépassé pour la requête app-server : {method}",
311
+ "adapter.errAppServerStopped": "Client app-server arrêté",
312
+ "adapter.errAppServerExited": "codex app-server arrêté (code={code} signal={signal})",
313
+ "adapter.errAppServerError": "Erreur app-server : {message}",
314
+ "adapter.logAppServerStderr": "app-server : {line}",
315
+ "adapter.logAppServerExited": "app-server arrêté (code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "Erreur de génération dsh",
317
+ "adapter.unknown": "inconnu",
318
+ "adapter.errGatewayClientMissing": "Client gateway non créé",
319
+ "adapter.errGatewayNotConnected": "Gateway non connecté",
320
+ "adapter.sessionTitleWithId": "session {name} {id}",
321
+ "adapter.promptApproveTool": "{name} demande l'approbation d'exécuter {tool}",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status} : {text}",
324
+ "claude.promptUrl": "URL : {url}",
325
+ "hermes.errBridgeNotRunning": "La boucle bridge n'est pas en cours d'exécution",
326
+ "hermes.errAskNoQuestion": "Aucune question fournie. Passez questions=[{question, choices?, multi_select?}, ...].",
327
+ "hermes.toolPairDesc": "Demande un code d'appairage téléphone à usage unique au relais tunnelbox (pour le scan/la saisie dans l'app tunnelbox). À utiliser quand l'utilisateur demande comment se connecter/s'appairer/scanner ou contrôler cet ordinateur depuis son téléphone.",
328
+ "hermes.toolPairRefreshDesc": "Forcer la demande d'un nouveau code d'appairage (par défaut : réutiliser/ignorer)",
329
+ "hermes.toolStatusDesc": "Renvoie l'état du plugin tunnelbox : adresse du relais, id de l'agent, liaison à un compte téléphone, répertoire de données et dernières infos d'appairage. À utiliser quand l'utilisateur demande l'état de connexion/la liaison/l'adresse du relais.",
330
+ "hermes.toolAskDesc": "Envoie une question/un choix au téléphone tunnelbox de l'utilisateur (UI distante) et attend sa sélection ou saisie. Renvoie un JSON : {answered: bool, user_response: string|string[]|null}. Si le téléphone est hors ligne ou dépasse le délai, answered=false.",
331
+ "hermes.toolAskQuestionDesc": "Le texte de la question à poser",
332
+ "hermes.toolAskChoicesDesc": "Options prédéfinies (facultatif ; jusqu'à 4)",
333
+ "hermes.toolAskMultipleDesc": "Autoriser la sélection multiple (nécessite choices)",
334
+ "hermes.cmdDesc": "tunnelbox : appairage téléphone / état de connexion",
335
+ "hermes.logConfigLoadFailed": "tunnelbox : échec de lecture de la config, valeurs par défaut : {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox : échec d'enregistrement des outils : {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox : échec d'enregistrement de la commande : {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox : échec d'enregistrement de la compétence : {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox : échec d'enregistrement des hooks : {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox : échec d'enregistrement du transport d'approbation : {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox : échec d'enregistrement de tunnelbox_ask : {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox : échec d'enregistrement de la section du prompt système : {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox : échec du démarrage du pont en arrière-plan : {err}",
344
+ "hermes.systemPromptAsk": "Lorsque vous avez besoin d'une décision, d'une clarification ou d'un choix de l'utilisateur et qu'un téléphone tunnelbox est associé, utilisez l'outil `tunnelbox_ask` pour poser la question sur son téléphone au lieu de deviner. Attendez sa réponse avant de continuer."
277
345
  }
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "選択リクエスト -> スマホ選択カード questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "承認リクエスト -> スマホ承認カード permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server 利用可能",
276
- "adapter.checkAppServerMissing": "この Codex CLI は `codex app-server` に対応していません(Codex CLI を更新してください)"
276
+ "adapter.checkAppServerMissing": "この Codex CLI は `codex app-server` に対応していません(Codex CLI を更新してください)",
277
+ "adapter.warnCursorCliMissing": "Cursor CLI の実行ファイル \"{bin}\" が見つかりません。インストール(https://cursor.com/docs/cli)するか、TUNNELBOX_CURSOR_BIN にパスを設定してください",
278
+ "adapter.checkCursorCliMissing": "Cursor CLI の実行ファイルが見つかりません({bin})。https://cursor.com/docs/cli からインストールしてください",
279
+ "adapter.checkCursorAcpHint": "Cursor CLI を検出しました。ACP モード(`agent acp`)でストリーミング/承認/選択を提供します",
280
+ "adapter.errAcpSpawn": "cursor `agent acp` の起動に失敗しました: {message}(Cursor CLI が `agent acp` に対応しているか確認してください)",
281
+ "adapter.errAcpNoSession": "Cursor ACP がセッション id を返しませんでした",
282
+ "adapter.logResumeFailed": "セッションの再開に失敗したため、新規セッションを開始します: {message}",
283
+ "adapter.logPlanNative": "プラン承認 -> スマホの承認カード permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "タイムアウトのため自動拒否しました(fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor がプランの承認を要求しています",
286
+ "adapter.checkCursorHeader": "tunnelbox-cursor 環境チェック",
287
+ "adapter.errAskBridge": "ask ブリッジの起動に失敗しました: {message}",
288
+ "adapter.logAskBridge": "MCP ask ブリッジが {url} で待ち受け中",
289
+ "cursor.mcpAskDesc": "ユーザーにスマホ(tunnelbox)で選択させ、回答があるまでブロックします。続行前にユーザーが選択肢から選ぶ必要がある場合(料理・モード・プラン案の選択など)に使用してください。選択された選択肢のラベルを返します。",
290
+ "cursor.mcpAskTitleDesc": "スマホのカードに表示するタイトル(任意)",
291
+ "cursor.mcpAskQuestionsDesc": "1 つ以上の質問。各質問には選択肢があります",
292
+ "cursor.mcpPlanDesc": "ユーザーにスマホ(tunnelbox)でプランの承認を求め、応答があるまでブロックします。承認されたかどうかを返します。",
293
+ "cursor.mcpNoBridge": "tunnelbox ask ブリッジが利用できません",
294
+ "cursor.mcpUnanswered": "ユーザーはスマホで回答しませんでした(オフラインまたはタイムアウト)。続行するか、会話で尋ねてください。",
295
+ "cursor.mcpRejected": "ユーザーはスマホで質問を拒否しました。",
296
+ "cursor.mcpAnswersHeader": "ユーザー(スマホ)の回答:",
297
+ "cursor.mcpAccepted": "ユーザーはプランを承認しました。",
298
+ "cursor.mcpDenied": "ユーザーはプランを拒否しました。",
299
+ "cursor.mcpPlanUnanswered": "ユーザーはスマホでプランに応答しませんでした(オフラインまたはタイムアウト)。",
300
+ "cursor.mcpAskNoQuestions": "質問が指定されていません。",
301
+ "cursor.mcpFailed": "tunnelbox ask が失敗しました",
302
+ "adapter.errCursorExitCode": "Cursor CLI がコード {code} で終了しました",
303
+ "adapter.errCursorExit": "Cursor CLI が終了しました({code}): {err}",
304
+ "adapter.errCursorSpawn": "Cursor CLI(agent)を起動できません。インストールとログインを確認してください({message})",
305
+ "adapter.errCursorStart": "Cursor CLI の起動に失敗しました: {message}",
306
+ "adapter.errCursorGeneric": "Cursor エラー",
307
+ "qr.downloadApp": "tunnelbox App(Android / iOS)をダウンロード: {url}",
308
+ "adapter.logLegacyHookRemoved": "旧 PermissionRequest hook(hooks.json)を削除しました",
309
+ "adapter.errAppServerNotRunning": "codex app-server が実行されていません",
310
+ "adapter.errAppServerTimeout": "app-server リクエストがタイムアウトしました: {method}",
311
+ "adapter.errAppServerStopped": "app-server クライアントが停止しました",
312
+ "adapter.errAppServerExited": "codex app-server が終了しました(code={code} signal={signal})",
313
+ "adapter.errAppServerError": "app-server エラー: {message}",
314
+ "adapter.logAppServerStderr": "app-server: {line}",
315
+ "adapter.logAppServerExited": "app-server が終了しました(code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "dsh の生成エラー",
317
+ "adapter.unknown": "不明",
318
+ "adapter.errGatewayClientMissing": "gateway クライアントが作成されていません",
319
+ "adapter.errGatewayNotConnected": "gateway に接続されていません",
320
+ "adapter.sessionTitleWithId": "{name} セッション {id}",
321
+ "adapter.promptApproveTool": "{name} が {tool} の実行承認を要求しています",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status}: {text}",
324
+ "claude.promptUrl": "URL: {url}",
325
+ "hermes.errBridgeNotRunning": "bridge ループが実行されていません",
326
+ "hermes.errAskNoQuestion": "質問が指定されていません。questions=[{question, choices?, multi_select?}, ...] を渡してください。",
327
+ "hermes.toolPairDesc": "tunnelbox リレーから一度限りのスマホペアリングコードを取得します(tunnelbox App でのスキャン/入力用)。スマホからの接続/ペアリング/スキャン方法や本機のリモート操作について尋ねられたときに使用します。",
328
+ "hermes.toolPairRefreshDesc": "新しいペアリングコードを強制的に要求するか(既定: 再利用/無視)",
329
+ "hermes.toolStatusDesc": "tunnelbox プラグインの状態を返します: リレーアドレス、agent id、スマホアカウントへのバインド有無、データディレクトリ、最新のペアリング情報。スマホ接続状態/バインド/リレーアドレスについて尋ねられたときに使用します。",
330
+ "hermes.toolAskDesc": "質問/選択をユーザーの tunnelbox スマホ(リモート UI)に送り、選択または入力があるまで待ちます。JSON を返します: {answered: bool, user_response: string|string[]|null}。スマホがオフラインまたはタイムアウトの場合は answered=false。",
331
+ "hermes.toolAskQuestionDesc": "尋ねる質問テキスト",
332
+ "hermes.toolAskChoicesDesc": "プリセット選択肢(任意、最大 4 つ)",
333
+ "hermes.toolAskMultipleDesc": "複数選択を許可(choices が必要)",
334
+ "hermes.cmdDesc": "tunnelbox: スマホペアリング / 接続状態",
335
+ "hermes.logConfigLoadFailed": "tunnelbox: 設定の読み込みに失敗、既定値を使用: {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox: ツールの登録に失敗: {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox: コマンドの登録に失敗: {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox: スキルの登録に失敗: {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox: hooks の登録に失敗: {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox: approval transport の登録に失敗: {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox: tunnelbox_ask の登録に失敗: {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox: system prompt セクションの登録に失敗: {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox: バックグラウンドブリッジの起動に失敗: {err}",
344
+ "hermes.systemPromptAsk": "ユーザーに決定/確認/選択を求める必要があり、tunnelbox スマホが接続されている場合は、推測せず `tunnelbox_ask` ツールでスマホに質問してください。回答があるまで待ってから続行します。"
277
345
  }
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "선택 요청 -> 휴대폰 선택 카드 questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "승인 요청 -> 휴대폰 승인 카드 permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server 사용 가능",
276
- "adapter.checkAppServerMissing": "이 Codex CLI 는 `codex app-server` 를 지원하지 않습니다 (Codex CLI 를 업그레이드하세요)"
276
+ "adapter.checkAppServerMissing": "이 Codex CLI 는 `codex app-server` 를 지원하지 않습니다 (Codex CLI 를 업그레이드하세요)",
277
+ "adapter.warnCursorCliMissing": "Cursor CLI 실행 파일 \"{bin}\"을(를) 찾을 수 없습니다. 설치하거나(https://cursor.com/docs/cli) TUNNELBOX_CURSOR_BIN에 경로를 지정하세요",
278
+ "adapter.checkCursorCliMissing": "Cursor CLI 실행 파일을 찾을 수 없습니다({bin}). https://cursor.com/docs/cli 에서 설치하세요",
279
+ "adapter.checkCursorAcpHint": "Cursor CLI를 감지했습니다. ACP 모드(`agent acp`)로 스트리밍/승인/선택을 제공합니다",
280
+ "adapter.errAcpSpawn": "cursor `agent acp` 시작 실패: {message} (Cursor CLI가 `agent acp`를 지원하는지 확인하세요)",
281
+ "adapter.errAcpNoSession": "Cursor ACP가 세션 id를 반환하지 않았습니다",
282
+ "adapter.logResumeFailed": "세션 재개 실패, 새 세션을 시작합니다: {message}",
283
+ "adapter.logPlanNative": "계획 승인 -> 휴대폰 승인 카드 permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "시간 초과로 자동 거부했습니다(fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor가 계획 승인을 요청합니다",
286
+ "adapter.checkCursorHeader": "tunnelbox-cursor 환경 점검",
287
+ "adapter.errAskBridge": "ask 브리지 시작 실패: {message}",
288
+ "adapter.logAskBridge": "MCP ask 브리지가 {url} 에서 대기 중",
289
+ "cursor.mcpAskDesc": "사용자가 휴대폰(tunnelbox)에서 선택하도록 요청하고 응답할 때까지 차단합니다. 계속하기 전에 사용자가 옵션 중 하나를 골라야 할 때(음식, 모드, 계획안 선택 등) 사용하세요. 선택한 옵션 라벨을 반환합니다.",
290
+ "cursor.mcpAskTitleDesc": "휴대폰 카드에 표시할 제목(선택)",
291
+ "cursor.mcpAskQuestionsDesc": "하나 이상의 질문. 각 질문에는 선택지가 있습니다",
292
+ "cursor.mcpPlanDesc": "사용자가 휴대폰(tunnelbox)에서 계획을 승인하도록 요청하고 응답할 때까지 차단합니다. 승인 여부를 반환합니다.",
293
+ "cursor.mcpNoBridge": "tunnelbox ask 브리지를 사용할 수 없습니다",
294
+ "cursor.mcpUnanswered": "사용자가 휴대폰에서 응답하지 않았습니다(오프라인 또는 시간 초과). 계속 진행하거나 대화로 물어보세요.",
295
+ "cursor.mcpRejected": "사용자가 휴대폰에서 질문을 거부했습니다.",
296
+ "cursor.mcpAnswersHeader": "사용자(휴대폰)의 응답:",
297
+ "cursor.mcpAccepted": "사용자가 계획을 승인했습니다.",
298
+ "cursor.mcpDenied": "사용자가 계획을 거부했습니다.",
299
+ "cursor.mcpPlanUnanswered": "사용자가 휴대폰에서 계획에 응답하지 않았습니다(오프라인 또는 시간 초과).",
300
+ "cursor.mcpAskNoQuestions": "질문이 제공되지 않았습니다.",
301
+ "cursor.mcpFailed": "tunnelbox ask 실패",
302
+ "adapter.errCursorExitCode": "Cursor CLI가 코드 {code}(으)로 종료되었습니다",
303
+ "adapter.errCursorExit": "Cursor CLI 종료({code}): {err}",
304
+ "adapter.errCursorSpawn": "Cursor CLI(agent)를 시작할 수 없습니다. 설치 및 로그인을 확인하세요({message})",
305
+ "adapter.errCursorStart": "Cursor CLI 시작 실패: {message}",
306
+ "adapter.errCursorGeneric": "Cursor 오류",
307
+ "qr.downloadApp": "tunnelbox 앱(Android / iOS) 다운로드: {url}",
308
+ "adapter.logLegacyHookRemoved": "이전 PermissionRequest hook(hooks.json)을 제거했습니다",
309
+ "adapter.errAppServerNotRunning": "codex app-server가 실행 중이 아닙니다",
310
+ "adapter.errAppServerTimeout": "app-server 요청 시간 초과: {method}",
311
+ "adapter.errAppServerStopped": "app-server 클라이언트가 중지되었습니다",
312
+ "adapter.errAppServerExited": "codex app-server 종료(code={code} signal={signal})",
313
+ "adapter.errAppServerError": "app-server 오류: {message}",
314
+ "adapter.logAppServerStderr": "app-server: {line}",
315
+ "adapter.logAppServerExited": "app-server 종료(code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "dsh 생성 오류",
317
+ "adapter.unknown": "알 수 없음",
318
+ "adapter.errGatewayClientMissing": "gateway 클라이언트가 생성되지 않았습니다",
319
+ "adapter.errGatewayNotConnected": "gateway에 연결되지 않았습니다",
320
+ "adapter.sessionTitleWithId": "{name} 세션 {id}",
321
+ "adapter.promptApproveTool": "{name}이(가) {tool} 실행 승인을 요청합니다",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status}: {text}",
324
+ "claude.promptUrl": "URL: {url}",
325
+ "hermes.errBridgeNotRunning": "bridge 루프가 실행 중이 아닙니다",
326
+ "hermes.errAskNoQuestion": "질문이 제공되지 않았습니다. questions=[{question, choices?, multi_select?}, ...]를 전달하세요.",
327
+ "hermes.toolPairDesc": "tunnelbox 릴레이에서 일회용 휴대폰 페어링 코드를 요청합니다(tunnelbox 앱에서 스캔/입력용). 사용자가 휴대폰으로 연결/페어링/스캔 방법이나 이 컴퓨터의 원격 제어를 물을 때 사용하세요.",
328
+ "hermes.toolPairRefreshDesc": "새 페어링 코드를 강제로 요청할지 여부(기본: 재사용/무시)",
329
+ "hermes.toolStatusDesc": "tunnelbox 플러그인 상태를 반환합니다: 릴레이 주소, agent id, 휴대폰 계정 바인딩 여부, 데이터 디렉터리, 최근 페어링 정보. 휴대폰 연결 상태/바인딩/릴레이 주소를 물을 때 사용하세요.",
330
+ "hermes.toolAskDesc": "질문/선택을 사용자의 tunnelbox 휴대폰(원격 UI)으로 보내고 선택 또는 입력을 기다립니다. JSON 반환: {answered: bool, user_response: string|string[]|null}. 휴대폰이 오프라인이거나 시간 초과면 answered=false.",
331
+ "hermes.toolAskQuestionDesc": "질문 텍스트",
332
+ "hermes.toolAskChoicesDesc": "사전 설정 선택지(선택, 최대 4개)",
333
+ "hermes.toolAskMultipleDesc": "다중 선택 허용(choices 필요)",
334
+ "hermes.cmdDesc": "tunnelbox: 휴대폰 페어링 / 연결 상태",
335
+ "hermes.logConfigLoadFailed": "tunnelbox: 설정 읽기 실패, 기본값 사용: {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox: 도구 등록 실패: {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox: 명령 등록 실패: {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox: 스킬 등록 실패: {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox: hooks 등록 실패: {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox: approval transport 등록 실패: {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox: tunnelbox_ask 등록 실패: {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox: system prompt 섹션 등록 실패: {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox: 백그라운드 브리지 시작 실패: {err}",
344
+ "hermes.systemPromptAsk": "사용자에게 결정/확인/선택이 필요하고 tunnelbox 휴대폰이 연결되어 있으면 추측하지 말고 `tunnelbox_ask` 도구로 휴대폰에서 질문하세요. 사용자가 답할 때까지 기다린 후 진행하세요."
277
345
  }
@@ -273,5 +273,73 @@
273
273
  "adapter.logQuestionNative": "选择请求 → 手机选择卡 questionID={id} (session={session})",
274
274
  "adapter.logPermissionNative": "审批请求 → 手机权限卡 permissionID={id} (session={session})",
275
275
  "adapter.checkAppServerOk": "codex app-server 可用",
276
- "adapter.checkAppServerMissing": "当前 Codex CLI 不支持 `codex app-server`(请升级 Codex CLI)"
276
+ "adapter.checkAppServerMissing": "当前 Codex CLI 不支持 `codex app-server`(请升级 Codex CLI)",
277
+ "adapter.warnCursorCliMissing": "未找到 Cursor CLI 可执行文件 \"{bin}\":请安装(https://cursor.com/docs/cli),或用 TUNNELBOX_CURSOR_BIN 指定路径",
278
+ "adapter.checkCursorCliMissing": "未找到 Cursor CLI 可执行文件({bin}):请从 https://cursor.com/docs/cli 安装",
279
+ "adapter.checkCursorAcpHint": "已检测到 Cursor CLI;将使用 ACP 模式(`agent acp`)提供流式/审批/选择",
280
+ "adapter.errAcpSpawn": "启动 cursor `agent acp` 失败:{message}(请确认 Cursor CLI 支持 `agent acp`)",
281
+ "adapter.errAcpNoSession": "Cursor ACP 未返回会话 id",
282
+ "adapter.logResumeFailed": "会话恢复失败,改为新建会话:{message}",
283
+ "adapter.logPlanNative": "计划审批 → 手机审批卡 permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "等待超时,自动拒绝(fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor 请求批准一项计划",
286
+ "adapter.checkCursorHeader": "tunnelbox-cursor 环境自检",
287
+ "adapter.errAskBridge": "启动 ask 桥失败:{message}",
288
+ "adapter.logAskBridge": "MCP ask 桥已监听 {url}",
289
+ "cursor.mcpAskDesc": "让用户在手机上(tunnelbox)做选择,并阻塞等待其作答。只要需要用户在继续前于若干选项中做出选择(如选菜、选模式、选方案)就调用它。返回用户所选的选项文本。",
290
+ "cursor.mcpAskTitleDesc": "手机卡片上显示的标题(可选)",
291
+ "cursor.mcpAskQuestionsDesc": "一个或多个问题;每个问题带可选项",
292
+ "cursor.mcpPlanDesc": "让用户在手机上(tunnelbox)批准一项计划,并阻塞等待其应答。返回计划是否被接受。",
293
+ "cursor.mcpNoBridge": "tunnelbox ask 桥不可用",
294
+ "cursor.mcpUnanswered": "用户未在手机上作答(离线或超时)。请继续,或用对话方式询问。",
295
+ "cursor.mcpRejected": "用户在手机上拒绝了这个提问。",
296
+ "cursor.mcpAnswersHeader": "用户(手机)的选择:",
297
+ "cursor.mcpAccepted": "用户已接受该计划。",
298
+ "cursor.mcpDenied": "用户拒绝了该计划。",
299
+ "cursor.mcpPlanUnanswered": "用户未在手机上回应计划(离线或超时)。",
300
+ "cursor.mcpAskNoQuestions": "未提供任何问题。",
301
+ "cursor.mcpFailed": "tunnelbox ask 调用失败",
302
+ "adapter.errCursorExitCode": "Cursor CLI 退出码 {code}",
303
+ "adapter.errCursorExit": "Cursor CLI 退出({code}): {err}",
304
+ "adapter.errCursorSpawn": "无法启动 Cursor CLI(agent):请确认已安装并登录({message})",
305
+ "adapter.errCursorStart": "Cursor CLI 启动失败: {message}",
306
+ "adapter.errCursorGeneric": "Cursor 出错",
307
+ "qr.downloadApp": "下载 tunnelbox App(Android / iOS):{url}",
308
+ "adapter.logLegacyHookRemoved": "已移除旧的 PermissionRequest hook(hooks.json)",
309
+ "adapter.errAppServerNotRunning": "codex app-server 未运行",
310
+ "adapter.errAppServerTimeout": "app-server 请求超时:{method}",
311
+ "adapter.errAppServerStopped": "app-server 客户端已停止",
312
+ "adapter.errAppServerExited": "codex app-server 退出(code={code} signal={signal})",
313
+ "adapter.errAppServerError": "app-server 错误:{message}",
314
+ "adapter.logAppServerStderr": "app-server:{line}",
315
+ "adapter.logAppServerExited": "app-server 退出(code={code} signal={signal})",
316
+ "adapter.errDshGenerate": "dsh 生成出错",
317
+ "adapter.unknown": "未知",
318
+ "adapter.errGatewayClientMissing": "gateway client 未创建",
319
+ "adapter.errGatewayNotConnected": "gateway 未连接",
320
+ "adapter.sessionTitleWithId": "{name} 会话 {id}",
321
+ "adapter.promptApproveTool": "{name} 请求批准运行 {tool}",
322
+ "index.log.serverStart": "opencode server={server} baseUrl={baseUrl} auth={auth} lang={lang}",
323
+ "agent.err.http": "HTTP {status}:{text}",
324
+ "claude.promptUrl": "URL:{url}",
325
+ "hermes.errBridgeNotRunning": "bridge loop 未运行",
326
+ "hermes.errAskNoQuestion": "未提供问题。请传入 questions=[{question, choices?, multi_select?}, ...]。",
327
+ "hermes.toolPairDesc": "向 tunnelbox 中继申请一次性手机配对码(供手机 tunnelbox App 扫码/输码配对)。当用户询问如何用手机连接/配对/扫码/远程控制本机时使用。",
328
+ "hermes.toolPairRefreshDesc": "是否强制申请新配对码(默认复用/忽略)",
329
+ "hermes.toolStatusDesc": "返回 tunnelbox 插件状态:中继地址、agent 标识、是否已绑定手机账号、数据目录与最近配对信息。当用户询问与手机的 tunnelbox 连接状态/是否绑定/中继地址时使用。",
330
+ "hermes.toolAskDesc": "把一个问题/选择发到用户的 tunnelbox 手机(远程 UI)并等待其选择或输入。返回 JSON:{answered: bool, user_response: string|string[]|null}。手机离线或超时会 answered=false。",
331
+ "hermes.toolAskQuestionDesc": "要问的问题文本",
332
+ "hermes.toolAskChoicesDesc": "预置选项(可选;最多 4 个)",
333
+ "hermes.toolAskMultipleDesc": "是否多选(需提供 choices)",
334
+ "hermes.cmdDesc": "tunnelbox:手机配对 / 连接状态",
335
+ "hermes.logConfigLoadFailed": "tunnelbox: 读取配置失败,使用默认值: {err}",
336
+ "hermes.logRegisterToolsFailed": "tunnelbox: 注册工具失败: {err}",
337
+ "hermes.logRegisterCommandFailed": "tunnelbox: 注册命令失败: {err}",
338
+ "hermes.logRegisterSkillFailed": "tunnelbox: 注册技能失败: {err}",
339
+ "hermes.logRegisterHooksFailed": "tunnelbox: 注册 hooks 失败: {err}",
340
+ "hermes.logRegisterApprovalFailed": "tunnelbox: 注册 approval transport 失败: {err}",
341
+ "hermes.logRegisterAskFailed": "tunnelbox: 注册 tunnelbox_ask 失败: {err}",
342
+ "hermes.logRegisterSystemPromptFailed": "tunnelbox: 注册 system prompt 段失败: {err}",
343
+ "hermes.logBackgroundBridgeFailed": "tunnelbox: 后台桥启动失败: {err}",
344
+ "hermes.systemPromptAsk": "当你需要用户做决定/澄清/选择,且已连接 tunnelbox 手机时,请用 `tunnelbox_ask` 工具在手机上提问,而不是自行猜测;等到用户作答后再继续。"
277
345
  }