@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.
@@ -1,166 +1,307 @@
1
- {
2
- "agent.err.createSession": "Sitzung konnte nicht erstellt werden",
3
- "agent.err.httpClient": "Auf den opencode-HTTP-Client kann nicht zugegriffen werden",
4
- "agent.err.unknownPerm": "Unbekannte Berechtigungsanfrage: {id}",
5
- "agent.err.unknownQuestion": "Unbekannte Frageanfrage: {id}",
6
- "agent.log.fallback404": "Bevorzugter Endpunkt lieferte 404, Fallback auf den anderen: {message}",
7
- "agent.log.gotPermReply": "Berechtigungsantwort vom Telefon erhalten (id={id} {reply} {version})",
8
- "agent.log.gotQuestionReply": "Frageantwort vom Telefon erhalten (id={id} {status} {version})",
9
- "agent.log.handleFailed": "Fehler beim Verarbeiten von {type}: {message}",
10
- "agent.log.msgOk": "Session-Nachrichten OK session={session} data={count} Modus={limited} win={win} ms={ms}",
11
- "agent.log.msgFailed": "Session-Nachrichten fehlgeschlagen session={session} err={err} ms={ms}",
12
- "agent.log.msgLimitFallback": "limit nicht unterstützt, Rückfall auf vollständigen Abruf (session={session})",
13
- "agent.log.httpOk": "opencode HTTP {status} {path}",
14
- "agent.log.pendingResent": "session.pending: {count} ausstehende Anfrage(n) für {session} erneut gesendet",
15
- "agent.log.unhandledType": "Nicht behandelter Nachrichtentyp: {type}",
16
- "events.log.fwdPermission": "Berechtigungsanfrage an Telefon weitergeleitet (id={id} tool={tool} {version})",
17
- "events.log.sessionDeleted": "session.deleted an Telefon weitergeleitet (session={session})",
18
- "events.log.permissionReplied": "opencode quittierte permission.replied (id={id} {response})",
19
- "events.log.questionRejected": "opencode quittierte question.rejected (id={id})",
20
- "events.log.questionReplied": "opencode quittierte question.replied (id={id})",
21
- "index.error.connectRelay": "Verbindung zum Relay nicht möglich; prüfen Sie die Relay-Adresse und versuchen Sie es erneut",
22
- "index.error.pairTimeout": "Zeitüberschreitung beim Warten auf einen Pairing-Code (Relay antwortet nicht)",
23
- "index.log.claimed": "An Ihr Telefonkonto gebunden. Das Telefon verbindet sich nun direkt über “Meine PCs”; kein erneutes Scannen nötig",
24
- "index.log.connectedRelay": "Mit Relay verbunden {url}",
25
- "index.log.loaded": "tunnelbox-opencode-Plugin gestartet (v{version})",
26
- "index.log.disconnected": "Vom Relay getrennt, verbinde automatisch neu…",
27
- "index.log.exit": "Beendet",
28
- "index.log.pairCode": "Pairing-Code erzeugt: {code}",
29
- "index.log.pairingStillClaimed": "Dieser Pairing-Code dient nur zum erneuten Pairing eines neuen Telefons im selben Konto. Dieser Computer ist bereits verknüpft und bleibt über „Meine Computer“ auf Ihrem Telefon erreichbar.",
30
- "index.log.pairingPreparing": "Verbindung zum Relay wird hergestellt und Pairing-Code generiert…",
31
- "index.log.permissionToPhone": "Berechtigungsanfrage → Genehmigung am Telefon (id={id} tool={tool})",
32
- "index.log.permissionTuiFallback": "App offline; Berechtigungsanfrage wird vom opencode-TUI übernommen (id={id} tool={tool})",
33
- "index.log.relayError": "Relay-Fehler: {msg}",
34
- "index.log.resetIdentity": "Vom Konto gelöst; Identität wird zurückgesetzt und ein neuer Pairing-Code erzeugt…",
35
- "index.log.unknown": "Unbekannt",
36
- "install.codeLine": "Pairing-Code: {code}",
37
- "install.commandInstalled": "Befehl installiert: {path}",
38
- "install.done": "Fertig. Versuche, eine Verbindung zum Relay herzustellen und Pairing-Informationen auszugeben:",
39
- "install.failConnect": "(Keine sofortige Verbindung zum Relay zum Drucken der Pairing-Informationen möglich — Relay nicht erreichbar oder Node zu alt.",
40
- "install.failConnectHint": "Nach dem Neustart von opencode den Terminal-QR-Code mit --print-logs anzeigen oder im opencode “Telefon-Pairing-Code anzeigen” bzw. /pair eingeben.)",
41
- "install.hintFresh": "Hinweis: Der Pairing-Code ist einmalig und etwa 10 Minuten gültig. Wenn Sie opencode später starten, nutzen Sie die beim Start gedruckten oder per /pair abgerufenen aktuellen Informationen.",
42
- "install.pluginInstalled": "Plugin installiert: {path}",
43
- "install.qrUnavailable": "(QR-Darstellung nicht verfügbar — nutzen Sie den Code oben)",
44
- "install.qrcodeEnsure": "Installiere qrcode in das opencode-Konfigurationsverzeichnis…",
45
- "install.qrcodeFail": "qrcode-Installation fehlgeschlagen (nicht kritisch — nur der Pairing-Code wird angezeigt): {err}",
46
- "install.relayError": "Relay hat einen Fehler zurückgegeben: {msg}",
47
- "install.scanHint": "Öffnen Sie tunnelbox auf dem Telefon, tippen Sie auf “Zum Pairing scannen” und scannen Sie den QR-Code oben zum Verbinden:",
48
- "pair.heading": "tunnelbox Telefon-Pairing",
49
- "pair.howTo": "Öffnen Sie die tunnelbox-App auf dem Telefon und scannen Sie den QR-Code oben mit “Zum Pairing scannen”, oder geben Sie den Pairing-Code manuell ein.",
50
- "pair.oneTime": "Der Pairing-Code ist einmalig und verfällt nach der Nutzung; für einen neuen Code “Pairing-Code aktualisieren anfordern.",
51
- "pair.promptBody": "Zeigen Sie bitte die Telefon-Pairing-Informationen dieses Computers an: den Pairing-Code und einen scannbaren QR-Code. Behalten Sie den QR-Code in einem Codeblock mit fester Breite und geben Sie ihn zeichengenau wieder, damit mein Telefon ihn scannen kann.",
52
- "pair.promptDescription": "Pairing-Code und scannbaren QR-Code anzeigen",
53
- "pair.scanIntro": "**Per Scan pairen**: Öffnen Sie die tunnelbox-App auf dem Telefon, tippen Sie auf “Zum Pairing scannen” und scannen Sie den QR-Code unten, um sich automatisch zu verbinden.",
54
- "perm.promptAuthorize": "opencode fordert eine Genehmigung an",
55
- "perm.promptPatterns": "opencode fordert Zugriff auf: {list}",
56
- "perm.promptResource": "opencode fordert Zugriff auf Ressourcen: {list}",
57
- "perm.promptTool": "opencode fordert die Ausführung von {tool} an",
58
- "qr.codeLabel": "Pairing-Code",
59
- "qr.fileWritten": "Pairing-Informationen geschrieben in: {path}",
60
- "qr.openHint": "Öffnen Sie die tunnelbox-App auf dem Telefon und scannen Sie den QR-Code oben, oder geben Sie den Pairing-Code manuell in der App ein.",
61
- "qr.titleNoType": "tunnelbox Telefon-Pairing",
62
- "qr.titleWithType": "tunnelbox {type} Telefon-Pairing",
63
- "qr.unavailable": "(qrcode nicht installiert — nutzen Sie den Pairing-Code oben)",
64
- "claude.errBusy": "Diese Sitzung läuft noch; warten Sie auf das Ende oder stoppen Sie sie zuerst",
65
- "claude.errTurn": "Generierungsfehler",
66
- "claude.pairingStillClaimed": "Bereits an ein Telefonkonto gebunden: Dieser Code dient nur zum Koppeln eines neuen Geräts auf demselben Konto; das aktuelle Gerät verbindet sich direkt über „Meine Computer“",
67
- "claude.pairForced": "--pair: Pairing-Code erzwungen (nur dieser Lauf)",
68
- "claude.pairUnclaimed": "Kein gebundenes Konto erkannt; Start der Pairing-Anleitung:",
69
- "claude.claimedHint": "An ein Telefonkonto gebunden: direkt über „Meine Computer“ auf dem Telefon verbinden",
70
- "claude.errStartFailed": "Start fehlgeschlagen:",
71
- "claude.msgStarted": "Claude-Code-Adapter gestartet (Strg+C zum Beenden)",
72
- "claude.warnInvalidMode": "Ungültiges TUNNELBOX_CLAUDE_MODE ignoriert: {raw} (erlaubt {list})",
73
- "claude.warnInvalidThinking": "Ungültiges TUNNELBOX_CLAUDE_THINKING ignoriert: {raw} (off|adaptive|enabled[:budget])",
74
- "claude.cmdNew": "Neue Sitzung",
75
- "claude.cmdHelp": "Hilfe anzeigen",
76
- "claude.errNoRelay": "Keine Relay-URL konfiguriert: Standard mit --env injizieren oder zur Laufzeit per TUNNELBOX_RELAY_URL überschreiben",
77
- "claude.logConnected": "Mit Relay {url} verbunden",
78
- "claude.logMsgUncaught": "Unbehandelte Ausnahme bei der Nachrichtenverarbeitung: {message}",
79
- "claude.reasonDisconnect": "Relay getrennt (fail-closed automatische Ablehnung)",
80
- "claude.reasonUnbind": "Konto entbunden (fail-closed automatische Ablehnung)",
81
- "claude.logDisconnected": "Vom Relay getrennt, verbinde automatisch neu…",
82
- "claude.logPairCode": "Pairing-Code generiert: {code}",
83
- "claude.logUnhandledType": "Unbehandelter Nachrichtentyp: {type}",
84
- "claude.logHandleFailed": "{type} konnte nicht verarbeitet werden: {message}",
85
- "claude.newSessionTitle": "Neue Sitzung",
86
- "claude.helpText": "Unterstützte Befehle:\n- /new neue Sitzung\n- /help Hilfe anzeigen",
87
- "claude.logPromptFailed": "session.prompt fehlgeschlagen: {message}",
88
- "claude.logAbortSent": "Abbruch gesendet (session={session})",
89
- "claude.logAbortFailed": "Abbruch fehlgeschlagen (session={session}): {message}",
90
- "claude.errBadWorkspaceEmpty": "Pfad zum Arbeitsbereich fehlt",
91
- "claude.errBadWorkspaceNotDir": "Verzeichnis existiert nicht oder ist unbrauchbar",
92
- "claude.logWorkspaceSwitched": "Arbeitsbereich gewechselt: {path}",
93
- "claude.logUnknownQuestionReply": "Keine Übereinstimmung für strukturierte Frage-Antwort (id={id})",
94
- "claude.logFlushedQuestions": "{count} ausstehende Frage(n) abgebrochen: {reason}",
95
- "claude.logFlushedApprovals": "{count} ausstehende Anfrage(n) abgelehnt: {reason}",
96
- "claude.logPendingResent": "session.pending: {count} ausstehende(r) Eintrag/Einträge für {session} erneut gesendet",
97
- "claude.logSetModeFailed": "setPermissionMode fehlgeschlagen (session={session}): {message}",
98
- "claude.errWorkspaceMissing": "Arbeitsbereich existiert nicht: {dir}",
99
- "claude.logSessionError": "Sitzungsfehler (session={session}): {message}",
100
- "claude.logOfflineDenyTool": "Relay offline, Tool {tool} automatisch abgelehnt",
101
- "claude.errOfflineDeny": "Relay offline, automatisch abgelehnt (fail-closed)",
102
- "claude.logAuqDisabled": "AskUserQuestion deaktiviert (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), automatisch abgelehnt",
103
- "claude.errAuqDisabled": "AskUserQuestion ist nicht aktiviert",
104
- "claude.logAuqParseFailed": "AskUserQuestion-Eingabe konnte nicht geparst werden, automatisch abgelehnt (fail-closed)",
105
- "claude.errAuqParse": "Fragen konnten nicht geparst werden",
106
- "claude.logAuqSkipped": "AskUserQuestion unbeantwortet/abgebrochen (session={session})",
107
- "claude.errAuqCancelled": "Keine Auswahl durch Benutzer (abgebrochen)",
108
- "claude.logAuqDone": "AskUserQuestion beantwortet (session={session})",
109
- "claude.promptRunTool": "Claude Code fordert Ausführung von {tool}",
110
- "claude.errApprovalTimeout": "Genehmigung abgelaufen, automatisch abgelehnt (fail-closed)",
111
- "claude.errUserDenied": "Vom Benutzer abgelehnt",
112
- "claude.errAborted": "Anfrage abgebrochen",
113
- "claude.logPermToPhone": "Berechtigungsanfrage (tool={tool}) → an Telefon gesendet permissionID={id}",
114
- "claude.errRelayUnreachable": "Relay nicht erreichbar, automatisch abgelehnt (fail-closed)",
115
- "claude.logQuestionOffline": "Relay offline, strukturierte Frage automatisch abgebrochen",
116
- "claude.logQuestionToPhone": "Strukturierte Frage ({count}) → an Telefon gesendet questionID={id}",
117
- "claude.logDialogOffline": "Relay offline, Dialog automatisch abgebrochen ({tool})",
118
- "claude.logDialogToPhone": "Dialoganfrage (kind={kind} tool={tool}) → an Telefon gesendet permissionID={id}",
119
- "claude.logAuqDialogParse": "AskUserQuestion-Payload konnte nicht geparst werden, Standardverhalten beibehalten (session={session})",
120
- "claude.logDialogUnmapped": "request_user_dialog(kind={kind}) ohne Zuordnung, Standardverhalten beibehalten (session={session})",
121
- "claude.promptMcpAuth": "MCP „{server}“ fordert Autorisierung",
122
- "claude.logElicitUnmapped": "MCP-Elicitation (server={server}, mode={mode}) nicht behandelt, automatisch abgelehnt (session={session})",
123
- "claude.logResetIdentity": "Konto entbunden; Identität wird zurückgesetzt und ein neuer Pairing-Code erzeugt…",
124
- "claude.dialogConfirm": "Claude Code fordert Bestätigung an ({kind})",
125
- "claude.resultTruncated": "… (Ergebnis gekürzt)",
126
- "claude.streamError": "claude-Streaming-Fehler",
127
- "claude.errListSessions": "Claude-Sitzungsliste konnte nicht gelesen werden",
128
- "claude.errReadHistory": "Sitzungsverlauf konnte nicht gelesen werden ({id})",
129
- "setup.langSet": "Laufzeitsprache gesetzt auf",
130
- "setup.langHint": "Der Adapter gibt nach dem Neustart in dieser Sprache aus (TUNNELBOX_LANG kann zur Laufzeit überschreiben). Statusdatei:",
131
- "setup.langCurrent": "Aktuelle Laufzeitsprache",
132
- "hermes.errNoRelay": "Keine Relay-URL konfiguriert: mit --env einen Standardwert einfügen oder zur Laufzeit mit TUNNELBOX_RELAY_URL überschreiben",
133
- "hermes.logConnected": "Mit Relay verbunden {url}",
134
- "hermes.logMsgUncaught": "Nicht abgefangene Ausnahme bei der Nachrichtenverarbeitung: {message}",
135
- "hermes.logDisconnected": "Vom Relay getrennt, automatische Neuverbindung…",
136
- "hermes.logPairCode": "Pairing-Code generiert: {code}",
137
- "hermes.logUnhandledType": "Nicht behandelter Nachrichtentyp: {type}",
138
- "hermes.logHandleFailed": "Fehler beim Verarbeiten von {type}: {message}",
139
- "hermes.logClaimed": "An Ihr Telefonkonto gebunden. Das Telefon verbindet sich künftig direkt über Meine Computer",
140
- "hermes.logResetIdentity": "Vom Konto entbunden; Identität wird zurückgesetzt und ein neuer Pairing-Code generiert…",
141
- "hermes.cmdNew": "Neue Sitzung",
142
- "hermes.cmdHelp": "Hilfe anzeigen",
143
- "hermes.newSessionTitle": "Neue Sitzung",
144
- "hermes.helpText": "Unterstützte Befehle:\n- /new neue Sitzung\n- /help Hilfe anzeigen",
145
- "hermes.errBusy": "Diese Sitzung wird gerade generiert; warten Sie auf den Abschluss oder stoppen Sie sie zuerst",
146
- "hermes.errBadWorkspace": "Dieses Verzeichnis existiert nicht oder ist unbrauchbar",
147
- "hermes.logWorkspaceSwitched": "Arbeitsbereich gewechselt: {path}",
148
- "hermes.errWorkspaceMissing": "Arbeitsbereich existiert nicht: {dir}",
149
- "hermes.errStartFailed": "Start fehlgeschlagen: {message}",
150
- "hermes.msgStarted": "Hermes-Adapter gestartet (Strg+C zum Beenden)",
151
- "hermes.logAbortSent": "Abbruch gesendet (session={session})",
152
- "hermes.logPromptFailed": "session.prompt fehlgeschlagen: {message}",
153
- "hermes.logTurnError": "Fehler bei Runde (session={session}): {message}",
154
- "hermes.logPairForced": "--pair: Pairing-Code erzwungen (nur dieser Lauf)",
155
- "hermes.pairingStillClaimed": "Bereits an ein Telefonkonto gebunden: Dieser Code dient nur zum erneuten Pairing eines neuen Geräts desselben Kontos; das aktuelle Gerät verbindet sich direkt über Meine Computer",
156
- "hermes.logPairNoRelay": "Kein Pairing-Code anforderbar: keine Relay-URL konfiguriert",
157
- "hermes.errSpawnHermes": "Hermes ({bin}) kann nicht gestartet werden: bitte Installation prüfen ({err})",
158
- "hermes.errHermesExit": "hermes beendet ({code}): {err}",
159
- "hermes.logSessionUpdated": "Sitzung aktualisiert (session={session})",
160
- "hermes.errNoInject": "Telefon-Nachrichteneinspeisung nicht verfügbar (Sitzung nicht interaktiv oder Prozess nicht bereit)",
161
- "hermes.pairNoRelay": "Relay nicht erreichbar (Relay nicht erreichbar oder websockets fehlt)",
162
- "hermes.pairTimeout": "Zeitüberschreitung bei der Pairing-Code-Anfrage (Relay antwortete nicht)",
163
- "hermes.errToolPair": "tunnelbox_pair fehlgeschlagen: {err}",
164
- "hermes.errToolStatus": "tunnelbox_status fehlgeschlagen: {err}",
165
- "hermes.cliUsage": "Verwendung: /tunnelbox <pair|status>\n pair Pairing-Code anfordern und anzeigen\n status Relay/Bindung/Verbindung anzeigen"
166
- }
1
+ {
2
+ "agent.err.createSession": "Sitzung konnte nicht erstellt werden",
3
+ "agent.err.httpClient": "Auf den opencode-HTTP-Client kann nicht zugegriffen werden",
4
+ "agent.err.unknownPerm": "Unbekannte Berechtigungsanfrage: {id}",
5
+ "agent.err.unknownQuestion": "Unbekannte Frageanfrage: {id}",
6
+ "agent.log.fallback404": "Bevorzugter Endpunkt lieferte 404, Fallback auf den anderen: {message}",
7
+ "agent.log.gotPermReply": "Berechtigungsantwort vom Telefon erhalten (id={id} {reply} {version})",
8
+ "agent.log.gotQuestionReply": "Frageantwort vom Telefon erhalten (id={id} {status} {version})",
9
+ "agent.log.handleFailed": "Fehler beim Verarbeiten von {type}: {message}",
10
+ "agent.log.msgOk": "Session-Nachrichten OK session={session} data={count} Modus={limited} win={win} ms={ms}",
11
+ "agent.log.msgFailed": "Session-Nachrichten fehlgeschlagen session={session} err={err} ms={ms}",
12
+ "agent.log.msgLimitFallback": "limit nicht unterstützt, Rückfall auf vollständigen Abruf (session={session})",
13
+ "agent.log.httpOk": "opencode HTTP {status} {path}",
14
+ "agent.log.pendingResent": "session.pending: {count} ausstehende Anfrage(n) für {session} erneut gesendet",
15
+ "agent.log.unhandledType": "Nicht behandelter Nachrichtentyp: {type}",
16
+ "events.log.fwdPermission": "Berechtigungsanfrage an Telefon weitergeleitet (id={id} tool={tool} {version})",
17
+ "events.log.sessionDeleted": "session.deleted an Telefon weitergeleitet (session={session})",
18
+ "events.log.permissionReplied": "opencode quittierte permission.replied (id={id} {response})",
19
+ "events.log.questionRejected": "opencode quittierte question.rejected (id={id})",
20
+ "events.log.questionReplied": "opencode quittierte question.replied (id={id})",
21
+ "index.error.connectRelay": "Verbindung zum Relay nicht möglich; prüfen Sie die Relay-Adresse und versuchen Sie es erneut",
22
+ "index.error.pairTimeout": "Zeitüberschreitung beim Warten auf einen Pairing-Code (Relay antwortet nicht)",
23
+ "index.log.claimed": "An Ihr Telefonkonto gebunden. Das Telefon verbindet sich nun direkt über “Meine PCs”; kein erneutes Scannen nötig",
24
+ "index.log.connectedRelay": "Mit Relay verbunden {url}",
25
+ "index.log.loaded": "tunnelbox-opencode-Plugin gestartet (v{version})",
26
+ "index.log.disconnected": "Vom Relay getrennt, verbinde automatisch neu…",
27
+ "index.log.exit": "Beendet",
28
+ "index.log.pairCode": "Pairing-Code erzeugt: {code}",
29
+ "index.log.pairingStillClaimed": "Dieser Pairing-Code dient nur zum erneuten Pairing eines neuen Telefons im selben Konto. Dieser Computer ist bereits verknüpft und bleibt über „Meine Computer“ auf Ihrem Telefon erreichbar.",
30
+ "index.log.pairingPreparing": "Verbindung zum Relay wird hergestellt und Pairing-Code generiert…",
31
+ "index.log.permissionToPhone": "Berechtigungsanfrage → Genehmigung am Telefon (id={id} tool={tool})",
32
+ "index.log.permissionTuiFallback": "App offline; Berechtigungsanfrage wird vom opencode-TUI übernommen (id={id} tool={tool})",
33
+ "index.log.relayError": "Relay-Fehler: {msg}",
34
+ "index.log.resetIdentity": "Vom Konto gelöst; Identität wird zurückgesetzt und ein neuer Pairing-Code erzeugt…",
35
+ "index.log.unknown": "Unbekannt",
36
+ "install.codeLine": "Pairing-Code: {code}",
37
+ "install.commandInstalled": "Befehl installiert: {path}",
38
+ "install.done": "Fertig. Versuche, eine Verbindung zum Relay herzustellen und Pairing-Informationen auszugeben:",
39
+ "install.failConnect": "(Keine sofortige Verbindung zum Relay zum Drucken der Pairing-Informationen möglich — Relay nicht erreichbar oder Node zu alt.",
40
+ "install.failConnectHint": "Nach dem Neustart von opencode den Terminal-QR-Code mit --print-logs anzeigen oder im opencode “Telefon-Pairing-Code anzeigen” bzw. /pair eingeben.)",
41
+ "install.hintFresh": "Hinweis: Der Pairing-Code ist einmalig und etwa 10 Minuten gültig. Wenn Sie opencode später starten, nutzen Sie die beim Start gedruckten oder per /pair abgerufenen aktuellen Informationen.",
42
+ "install.pluginInstalled": "Plugin installiert: {path}",
43
+ "install.qrUnavailable": "(QR-Darstellung nicht verfügbar — nutzen Sie den Code oben)",
44
+ "install.qrcodeEnsure": "Installiere qrcode in das opencode-Konfigurationsverzeichnis…",
45
+ "install.qrcodeFail": "qrcode-Installation fehlgeschlagen (nicht kritisch — nur der Pairing-Code wird angezeigt): {err}",
46
+ "install.relayError": "Relay hat einen Fehler zurückgegeben: {msg}",
47
+ "install.scanHint": "Öffnen Sie tunnelbox auf dem Telefon, tippen Sie auf “Zum Pairing scannen” und scannen Sie den QR-Code oben zum Verbinden:",
48
+ "pair.heading": "tunnelbox Telefon-Pairing",
49
+ "pair.howTo": "Öffnen Sie die tunnelbox-App auf dem Telefon und scannen Sie den QR-Code oben mit “Zum Pairing scannen”, oder geben Sie den Pairing-Code manuell ein.",
50
+ "pair.oneTime": "Der Kopplungscode ist einmalig und etwa 10 Minuten gültig; nach Nutzung oder Ablauf wird er ungültig. Fordern Sie zum Erneuern „Kopplungscode aktualisieren an.",
51
+ "pair.promptBody": "Zeigen Sie bitte die Telefon-Pairing-Informationen dieses Computers an: den Pairing-Code und einen scannbaren QR-Code. Behalten Sie den QR-Code in einem Codeblock mit fester Breite und geben Sie ihn zeichengenau wieder, damit mein Telefon ihn scannen kann.",
52
+ "pair.promptDescription": "Pairing-Code und scannbaren QR-Code anzeigen",
53
+ "pair.scanIntro": "**Per Scan pairen**: Öffnen Sie die tunnelbox-App auf dem Telefon, tippen Sie auf “Zum Pairing scannen” und scannen Sie den QR-Code unten, um sich automatisch zu verbinden.",
54
+ "perm.promptAuthorize": "opencode fordert eine Genehmigung an",
55
+ "perm.promptPatterns": "opencode fordert Zugriff auf: {list}",
56
+ "perm.promptResource": "opencode fordert Zugriff auf Ressourcen: {list}",
57
+ "perm.promptTool": "opencode fordert die Ausführung von {tool} an",
58
+ "qr.codeLabel": "Pairing-Code",
59
+ "qr.fileWritten": "Pairing-Informationen geschrieben in: {path}",
60
+ "qr.openHint": "Öffnen Sie die tunnelbox-App auf dem Telefon und scannen Sie den QR-Code oben, oder geben Sie den Pairing-Code manuell in der App ein.",
61
+ "qr.titleNoType": "tunnelbox Telefon-Pairing",
62
+ "qr.titleWithType": "tunnelbox {type} Telefon-Pairing",
63
+ "qr.unavailable": "(qrcode nicht installiert — nutzen Sie den Pairing-Code oben)",
64
+ "claude.errBusy": "Diese Sitzung läuft noch; warten Sie auf das Ende oder stoppen Sie sie zuerst",
65
+ "claude.errTurn": "Generierungsfehler",
66
+ "claude.pairingStillClaimed": "Bereits an ein Telefonkonto gebunden: Dieser Code dient nur zum Koppeln eines neuen Geräts auf demselben Konto; das aktuelle Gerät verbindet sich direkt über „Meine Computer“",
67
+ "claude.pairForced": "--pair: Pairing-Code erzwungen (nur dieser Lauf)",
68
+ "claude.pairUnclaimed": "Kein gebundenes Konto erkannt; Start der Pairing-Anleitung:",
69
+ "claude.claimedHint": "An ein Telefonkonto gebunden: direkt über „Meine Computer“ auf dem Telefon verbinden",
70
+ "claude.errStartFailed": "Start fehlgeschlagen:",
71
+ "claude.msgStarted": "Claude-Code-Adapter gestartet (Strg+C zum Beenden)",
72
+ "claude.warnInvalidMode": "Ungültiges TUNNELBOX_CLAUDE_MODE ignoriert: {raw} (erlaubt {list})",
73
+ "claude.warnInvalidThinking": "Ungültiges TUNNELBOX_CLAUDE_THINKING ignoriert: {raw} (off|adaptive|enabled[:budget])",
74
+ "claude.cmdNew": "Neue Sitzung",
75
+ "claude.cmdHelp": "Hilfe anzeigen",
76
+ "claude.errNoRelay": "Keine Relay-URL konfiguriert: Standard mit --env injizieren oder zur Laufzeit per TUNNELBOX_RELAY_URL überschreiben",
77
+ "claude.logConnected": "Mit Relay {url} verbunden",
78
+ "claude.logMsgUncaught": "Unbehandelte Ausnahme bei der Nachrichtenverarbeitung: {message}",
79
+ "claude.reasonDisconnect": "Relay getrennt (fail-closed automatische Ablehnung)",
80
+ "claude.reasonUnbind": "Konto entbunden (fail-closed automatische Ablehnung)",
81
+ "claude.logDisconnected": "Vom Relay getrennt, verbinde automatisch neu…",
82
+ "claude.logPairCode": "Pairing-Code generiert: {code}",
83
+ "claude.logUnhandledType": "Unbehandelter Nachrichtentyp: {type}",
84
+ "claude.logHandleFailed": "{type} konnte nicht verarbeitet werden: {message}",
85
+ "claude.newSessionTitle": "Neue Sitzung",
86
+ "claude.helpText": "Unterstützte Befehle:\n- /new neue Sitzung\n- /help Hilfe anzeigen",
87
+ "claude.logPromptFailed": "session.prompt fehlgeschlagen: {message}",
88
+ "claude.logAbortSent": "Abbruch gesendet (session={session})",
89
+ "claude.logAbortFailed": "Abbruch fehlgeschlagen (session={session}): {message}",
90
+ "claude.errBadWorkspaceEmpty": "Pfad zum Arbeitsbereich fehlt",
91
+ "claude.errBadWorkspaceNotDir": "Verzeichnis existiert nicht oder ist unbrauchbar",
92
+ "claude.logWorkspaceSwitched": "Arbeitsbereich gewechselt: {path}",
93
+ "claude.logUnknownQuestionReply": "Keine Übereinstimmung für strukturierte Frage-Antwort (id={id})",
94
+ "claude.logFlushedQuestions": "{count} ausstehende Frage(n) abgebrochen: {reason}",
95
+ "claude.logFlushedApprovals": "{count} ausstehende Anfrage(n) abgelehnt: {reason}",
96
+ "claude.logPendingResent": "session.pending: {count} ausstehende(r) Eintrag/Einträge für {session} erneut gesendet",
97
+ "claude.logSetModeFailed": "setPermissionMode fehlgeschlagen (session={session}): {message}",
98
+ "claude.errWorkspaceMissing": "Arbeitsbereich existiert nicht: {dir}",
99
+ "claude.logSessionError": "Sitzungsfehler (session={session}): {message}",
100
+ "claude.logOfflineDenyTool": "Relay offline, Tool {tool} automatisch abgelehnt",
101
+ "claude.errOfflineDeny": "Relay offline, automatisch abgelehnt (fail-closed)",
102
+ "claude.logAuqDisabled": "AskUserQuestion deaktiviert (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), automatisch abgelehnt",
103
+ "claude.errAuqDisabled": "AskUserQuestion ist nicht aktiviert",
104
+ "claude.logAuqParseFailed": "AskUserQuestion-Eingabe konnte nicht geparst werden, automatisch abgelehnt (fail-closed)",
105
+ "claude.errAuqParse": "Fragen konnten nicht geparst werden",
106
+ "claude.logAuqSkipped": "AskUserQuestion unbeantwortet/abgebrochen (session={session})",
107
+ "claude.errAuqCancelled": "Keine Auswahl durch Benutzer (abgebrochen)",
108
+ "claude.logAuqDone": "AskUserQuestion beantwortet (session={session})",
109
+ "claude.promptRunTool": "Claude Code fordert Ausführung von {tool}",
110
+ "claude.errApprovalTimeout": "Genehmigung abgelaufen, automatisch abgelehnt (fail-closed)",
111
+ "claude.errUserDenied": "Vom Benutzer abgelehnt",
112
+ "claude.errAborted": "Anfrage abgebrochen",
113
+ "claude.logPermToPhone": "Berechtigungsanfrage (tool={tool}) → an Telefon gesendet permissionID={id}",
114
+ "claude.errRelayUnreachable": "Relay nicht erreichbar, automatisch abgelehnt (fail-closed)",
115
+ "claude.logQuestionOffline": "Relay offline, strukturierte Frage automatisch abgebrochen",
116
+ "claude.logQuestionToPhone": "Strukturierte Frage ({count}) → an Telefon gesendet questionID={id}",
117
+ "claude.logDialogOffline": "Relay offline, Dialog automatisch abgebrochen ({tool})",
118
+ "claude.logDialogToPhone": "Dialoganfrage (kind={kind} tool={tool}) → an Telefon gesendet permissionID={id}",
119
+ "claude.logAuqDialogParse": "AskUserQuestion-Payload konnte nicht geparst werden, Standardverhalten beibehalten (session={session})",
120
+ "claude.logDialogUnmapped": "request_user_dialog(kind={kind}) ohne Zuordnung, Standardverhalten beibehalten (session={session})",
121
+ "claude.promptMcpAuth": "MCP „{server}“ fordert Autorisierung",
122
+ "claude.logElicitUnmapped": "MCP-Elicitation (server={server}, mode={mode}) nicht behandelt, automatisch abgelehnt (session={session})",
123
+ "claude.logResetIdentity": "Konto entbunden; Identität wird zurückgesetzt und ein neuer Pairing-Code erzeugt…",
124
+ "claude.dialogConfirm": "Claude Code fordert Bestätigung an ({kind})",
125
+ "claude.resultTruncated": "… (Ergebnis gekürzt)",
126
+ "claude.streamError": "claude-Streaming-Fehler",
127
+ "claude.errListSessions": "Claude-Sitzungsliste konnte nicht gelesen werden",
128
+ "claude.errReadHistory": "Sitzungsverlauf konnte nicht gelesen werden ({id})",
129
+ "setup.langSet": "Laufzeitsprache gesetzt auf",
130
+ "setup.langHint": "Der Adapter gibt nach dem Neustart in dieser Sprache aus (TUNNELBOX_LANG kann zur Laufzeit überschreiben). Statusdatei:",
131
+ "setup.langCurrent": "Aktuelle Laufzeitsprache",
132
+ "hermes.errNoRelay": "Keine Relay-URL konfiguriert: mit --env einen Standardwert einfügen oder zur Laufzeit mit TUNNELBOX_RELAY_URL überschreiben",
133
+ "hermes.logConnected": "Mit Relay verbunden {url}",
134
+ "hermes.logMsgUncaught": "Nicht abgefangene Ausnahme bei der Nachrichtenverarbeitung: {message}",
135
+ "hermes.logDisconnected": "Vom Relay getrennt, automatische Neuverbindung…",
136
+ "hermes.logPairCode": "Pairing-Code generiert: {code}",
137
+ "hermes.logUnhandledType": "Nicht behandelter Nachrichtentyp: {type}",
138
+ "hermes.logHandleFailed": "Fehler beim Verarbeiten von {type}: {message}",
139
+ "hermes.logClaimed": "An Ihr Telefonkonto gebunden. Das Telefon verbindet sich künftig direkt über Meine Computer",
140
+ "hermes.logResetIdentity": "Vom Konto entbunden; Identität wird zurückgesetzt und ein neuer Pairing-Code generiert…",
141
+ "hermes.cmdNew": "Neue Sitzung",
142
+ "hermes.cmdHelp": "Hilfe anzeigen",
143
+ "hermes.newSessionTitle": "Neue Sitzung",
144
+ "hermes.helpText": "Unterstützte Befehle:\n- /new neue Sitzung\n- /help Hilfe anzeigen",
145
+ "hermes.errBusy": "Diese Sitzung wird gerade generiert; warten Sie auf den Abschluss oder stoppen Sie sie zuerst",
146
+ "hermes.errBadWorkspace": "Dieses Verzeichnis existiert nicht oder ist unbrauchbar",
147
+ "hermes.logWorkspaceSwitched": "Arbeitsbereich gewechselt: {path}",
148
+ "hermes.errWorkspaceMissing": "Arbeitsbereich existiert nicht: {dir}",
149
+ "hermes.errStartFailed": "Start fehlgeschlagen: {message}",
150
+ "hermes.msgStarted": "Hermes-Adapter gestartet (Strg+C zum Beenden)",
151
+ "hermes.logAbortSent": "Abbruch gesendet (session={session})",
152
+ "hermes.logPromptFailed": "session.prompt fehlgeschlagen: {message}",
153
+ "hermes.logTurnError": "Fehler bei Runde (session={session}): {message}",
154
+ "hermes.logPairForced": "--pair: Pairing-Code erzwungen (nur dieser Lauf)",
155
+ "hermes.pairingStillClaimed": "Bereits an ein Telefonkonto gebunden: Dieser Code dient nur zum erneuten Pairing eines neuen Geräts desselben Kontos; das aktuelle Gerät verbindet sich direkt über Meine Computer",
156
+ "hermes.logPairNoRelay": "Kein Pairing-Code anforderbar: keine Relay-URL konfiguriert",
157
+ "hermes.errSpawnHermes": "Hermes ({bin}) kann nicht gestartet werden: bitte Installation prüfen ({err})",
158
+ "hermes.errHermesExit": "hermes beendet ({code}): {err}",
159
+ "hermes.logSessionUpdated": "Sitzung aktualisiert (session={session})",
160
+ "hermes.errNoInject": "Telefon-Nachrichteneinspeisung nicht verfügbar (Sitzung nicht interaktiv oder Prozess nicht bereit)",
161
+ "hermes.pairNoRelay": "Relay nicht erreichbar (Relay nicht erreichbar oder websockets fehlt)",
162
+ "hermes.pairTimeout": "Zeitüberschreitung bei der Pairing-Code-Anfrage (Relay antwortete nicht)",
163
+ "hermes.errToolPair": "tunnelbox_pair fehlgeschlagen: {err}",
164
+ "hermes.errToolStatus": "tunnelbox_status fehlgeschlagen: {err}",
165
+ "hermes.cliUsage": "Verwendung: /tunnelbox <pair|status>\n pair Pairing-Code anfordern und anzeigen\n status Relay/Bindung/Verbindung anzeigen",
166
+ "qr.validFor": "Der Kopplungscode ist etwa 10 Minuten gültig; holen Sie bei Ablauf einen neuen auf Ihrem Computer.",
167
+ "pair.toolDesc": "Zeigt die Telefon-Kopplungsinfo dieses Computers (Kopplungscode und scannbarer QR-Code). Aufrufen, wenn der Nutzer nach Kopplung, QR-Code-Scan oder Steuerung dieses Computers vom Telefon fragt.",
168
+ "pair.toolRefreshDesc": "Ob ein neuer Kopplungscode vom Relay angefordert werden soll",
169
+ "state.errSaveState": "Status konnte nicht gespeichert werden",
170
+ "adapter.logConnected": "Mit Relay verbunden {url}",
171
+ "adapter.logDisconnected": "Vom Relay getrennt, automatische Wiederverbindung…",
172
+ "adapter.logPairCode": "Kopplungscode erzeugt: {code}",
173
+ "adapter.logClaimed": "Mit Ihrem Telefonkonto verknüpft. Ab jetzt verbindet sich das Telefon direkt über „Meine Computer“",
174
+ "adapter.logResetIdentity": "Vom Konto getrennt; Identität wird zurückgesetzt und neuer Kopplungscode erzeugt…",
175
+ "adapter.logUnhandledType": "Unbehandelter Nachrichtentyp: {type}",
176
+ "adapter.errNoRelay": "Keine Relay-URL konfiguriert: mit --env einen Standardwert einbauen oder zur Laufzeit mit TUNNELBOX_RELAY_URL überschreiben",
177
+ "adapter.errBusy": "Diese Sitzung läuft noch; warten Sie auf den Abschluss oder stoppen Sie sie zuerst",
178
+ "adapter.errBadWorkspaceEmpty": "Arbeitsbereich-Pfad fehlt",
179
+ "adapter.errBadWorkspaceNotDir": "Verzeichnis existiert nicht oder ist unbrauchbar",
180
+ "adapter.errWorkspaceMissing": "Arbeitsbereich existiert nicht: {dir}",
181
+ "adapter.cmdNew": "Neue Sitzung",
182
+ "adapter.cmdHelp": "Hilfe anzeigen",
183
+ "adapter.helpText": "Unterstützte Befehle:\n- /new neue Sitzung\n- /help Hilfe anzeigen",
184
+ "adapter.newSessionTitle": "Neue Sitzung",
185
+ "install.langHelpTitle": "Von install-local unterstützte Sprachen (--lang <tag>):",
186
+ "install.langHelpExample": "Beispiel: npm run install-local -- --lang de-DE",
187
+ "install.unknownLang": "Unbekannte Sprache \"{raw}\", Rückfall auf en-US. Unterstützt: {list}",
188
+ "hermes.errAskRequired": "question ist erforderlich",
189
+ "hermes.msgPhoneUnavailable": "Telefon nicht verfügbar oder keine Antwort: Nutzen Sie das integrierte clarify für eine lokale Frage oder entscheiden Sie selbst.",
190
+ "hermes.errClarifyUnavailable": "clarify-Unterstützung nicht verfügbar",
191
+ "hermes.errAskFailed": "tunnelbox_ask fehlgeschlagen: {err}",
192
+ "hermes.errClarifyFailed": "clarify fehlgeschlagen: {err}",
193
+ "bin.denied": "Vom Telefon abgelehnt",
194
+ "bin.timeout": "Genehmigung Zeitüberschreitung (fail-closed)",
195
+ "bin.reqRun": "Claude Code fordert die Ausführung von {tool} an",
196
+ "bin.pairTitle": "tunnelbox Telefon-Kopplung",
197
+ "bin.pairCodeLine": " Kopplungscode: {code}",
198
+ "bin.pairHint": "Öffnen Sie die tunnelbox-App, tippen Sie auf „Zum Koppeln scannen“ und scannen Sie den QR-Code, oder geben Sie den Kopplungscode manuell ein (einmalig).",
199
+ "bin.pairWritten": " Kopplungsinfo geschrieben nach: {path}",
200
+ "bin.pairRequestFailed": "Anforderung eines Kopplungscodes vom Relay fehlgeschlagen.",
201
+ "bin.alreadyClaimed": "Dieser Computer ist bereits mit einem Telefonkonto verknüpft; verbinden Sie sich direkt über „Meine Computer“. Zum erneuten Koppeln zuerst am Telefon trennen.",
202
+ "bin.noRelay": "Keine Relay-URL konfiguriert: setzen Sie TUNNELBOX_RELAY_URL und versuchen Sie es erneut.",
203
+ "bin.connectFailed": "Verbindung zum Relay nicht möglich: {relay}\nSetzen Sie TUNNELBOX_RELAY_URL oder konfigurieren Sie es in der official-plugin-Statusdatei.",
204
+ "bin.statusRelay": "Relay: {value}",
205
+ "bin.statusAgent": "Agent-ID: {value}",
206
+ "bin.statusClaimed": "Telefon verknüpft: {value}",
207
+ "bin.statusStateFile": "Statusdatei: {value}",
208
+ "bin.statusLatest": "Neueste Kopplungsinfo:",
209
+ "bin.usage": "Verwendung: tunnelbox <pair|status|ask>",
210
+ "bin.usagePair": " pair Telefon-Kopplungscode anfordern und ausgeben",
211
+ "bin.usageStatus": " status Relay-/Verknüpfungsstatus anzeigen",
212
+ "bin.usageAsk": " ask eine Tool-Genehmigung ans Telefon weiterleiten",
213
+ "adapter.logMsgUncaught": "Unabgefangene Ausnahme bei der Nachrichtenverarbeitung: {message}",
214
+ "adapter.logHandleFailed": "Verarbeitung von {type} fehlgeschlagen: {message}",
215
+ "adapter.logPromptFailed": "session.prompt fehlgeschlagen: {message}",
216
+ "adapter.logAbortSent": "Abbruch gesendet (session={session})",
217
+ "adapter.errUserDenied": "Vom Nutzer abgelehnt",
218
+ "adapter.logPendingResent": "session.pending: {count} ausstehende Anfrage(n) erneut gesendet",
219
+ "adapter.logWorkspaceSwitched": "Arbeitsbereich gewechselt: {path}",
220
+ "adapter.logNewSession": "Neue Sitzung gespeichert codexId={codexId} (alias={session})",
221
+ "adapter.logSessionError": "Turn-Fehler (session={session}): {message}",
222
+ "adapter.logDshSent": "An dsh gesendet (session={session})",
223
+ "adapter.logReadHistoryFailed": "Sitzungsverlauf lesen fehlgeschlagen ({session}): {message}",
224
+ "adapter.logAnswererInitFailed": "Initialisierung des Antwortgebers fehlgeschlagen: {message}",
225
+ "adapter.logRemoteMode": "Dualanzeige-Modus: Auswahl/Genehmigung über typert-Multi-Client-Broadcast; Telefon und dsh web teilen die Ansicht, die erste Antwort gewinnt",
226
+ "adapter.logRemoteProbeFailed": "typert-Remote-Ereignisquellen-Prüfung fehlgeschlagen; Rückfall auf lokalen Antwortmodus: {message}",
227
+ "adapter.logLocalMode": "Lokaler Antwortmodus: Auswahl/Genehmigung erfolgt durch das Telefon (headless, ohne dsh web-Broadcast)",
228
+ "adapter.logRemoteStreamInterrupted": "remote events-Stream unterbrochen: {message}",
229
+ "adapter.logResultRejected": "$events/result nicht akzeptiert ({eventId}): {message}",
230
+ "adapter.logResultBackfillFailed": "$events/result-Rückschreiben fehlgeschlagen ({eventId}): {message}",
231
+ "adapter.logRemoteQuestion": "remote-Frage-Broadcast → Telefon-Fragekarte questionID={id} (session={session})",
232
+ "adapter.errRemoteReadyFrame": "Unerwarteter erster Frame von remote events",
233
+ "adapter.logRemoteApproval": "remote-Genehmigungs-Broadcast → Telefon-Berechtigungskarte permissionID={id} (session={session})",
234
+ "adapter.logUserQuestionRoute": "user-questions-Auswahl → weitergeleitet an session={session}",
235
+ "adapter.errDshQuestionEmpty": "dsh-Frageinhalt ist leer",
236
+ "adapter.errQuestionTimeout": "Frage-Zeitüberschreitung ({seconds}s), abgebrochen",
237
+ "adapter.errQuestionCancelledAbort": "Frage abgebrochen (Agent abgebrochen)",
238
+ "adapter.errQuestionCancelledRelay": "Relay nicht erreichbar, Frage abgebrochen",
239
+ "adapter.logQuestionToPhone": "user-questions-Auswahl → an Telefon-Fragekarte gesendet questionID={id} (session={session})",
240
+ "adapter.errQuestionUserCancelled": "Nutzer hat die Frage am Telefon abgebrochen/abgelehnt",
241
+ "adapter.logApprovalRequest": "Genehmigungsanfrage (tool={tool}) → an Telefon-Berechtigungskarte gesendet permissionID={id}",
242
+ "adapter.logAgentPresetFailed": "agentPreset-Auflösung fehlgeschlagen ({preset}); Rückfall ohne Preset: {message}",
243
+ "adapter.logSessionLiveAdopted": "Sitzung {session} wird bereits von einem anderen Agent in diesem Prozess gehalten (live); vorhandener Agent wird übernommen: {message}",
244
+ "adapter.logDisposeSkipped": "Übernommener externer Live-Agent führt dispose nicht aus (Sitzung {session} wird vom ursprünglichen Halter verwaltet)",
245
+ "adapter.logAgentCreateFailed": "Agent erstellen/fortsetzen fehlgeschlagen ({session}): {message}",
246
+ "adapter.errSessionBusyLive": "Sitzung {session} ist belegt (live); versuchen Sie es später erneut",
247
+ "adapter.errAgentsUnavailable": "agents-Dienst nicht verfügbar",
248
+ "adapter.logToolReason": "dsh fordert die Ausführung des Tools {tool} an",
249
+ "adapter.logGatewayConnected": "Mit lokalem OpenClaw Gateway verbunden ({version})",
250
+ "adapter.logGatewayDisconnected": "Vom OpenClaw Gateway getrennt; der offizielle Client verbindet sich neu…",
251
+ "adapter.logGatewayConnectFailed": "Verbindung zum lokalen OpenClaw Gateway nicht möglich (beim ersten Mal das Gerät lokal freigeben: `openclaw devices list` + `openclaw devices approve <requestId>`)",
252
+ "adapter.errGatewayNoSessionKey": "Gateway hat keinen Sitzungsschlüssel zurückgegeben",
253
+ "adapter.logDeleteSessionFailed": "Sitzung löschen fehlgeschlagen ({session}): {message} (wird dennoch als gelöscht bestätigt)",
254
+ "adapter.logApprovalReplyFailed": "Genehmigungsantwort fehlgeschlagen ({id}): {message}",
255
+ "adapter.logPendingApproval": "session.pending: {count} ausstehende Genehmigung(en) erneut gesendet (session={session})",
256
+ "adapter.workspaceDefault": "Standard",
257
+ "adapter.cursorSessionTitle": "Cursor-Sitzung",
258
+ "adapter.reasonDisconnect": "Relay getrennt, automatische Ablehnung (fail-closed)",
259
+ "adapter.warnInvalidEnv": "Ungültiges {name} ignoriert: {raw} ({list})",
260
+ "adapter.errStartFailed": "Start fehlgeschlagen:",
261
+ "adapter.msgStarted": "{name}-Adapter gestartet (Ctrl+C zum Beenden)",
262
+ "adapter.warnCliMissing": "Ausführbare Datei „{bin}“ nicht gefunden; installieren Sie sie (z. B. npm i -g @openai/codex) oder setzen Sie TUNNELBOX_CODEX_BIN auf ihren Pfad",
263
+ "adapter.errCliNotFound": "Ausführbare Datei {name} „{bin}“ nicht gefunden: Installieren Sie die Codex CLI (npm i -g @openai/codex) oder setzen Sie TUNNELBOX_CODEX_BIN",
264
+ "adapter.errSessionNotFound": "Sitzung nicht gefunden oder bereits gelöscht",
265
+ "adapter.checkHeader": "tunnelbox-codex-Umgebungsprüfung",
266
+ "adapter.checkCliOk": "Ausführbare Datei {name}: {path}",
267
+ "adapter.checkCliMissing": "Ausführbare Datei {name} nicht gefunden ({bin})",
268
+ "bin.yes": "ja",
269
+ "bin.no": "nein",
270
+ "adapter.errAppServerSpawn": "codex app-server konnte nicht gestartet werden: {message} (prüfen Sie, ob Ihre Codex CLI `codex app-server` unterstützt)",
271
+ "adapter.errAppServerExit": "codex app-server wurde beendet; ausstehende Genehmigungen/Auswahlen wurden automatisch abgelehnt",
272
+ "adapter.logUnsupportedServerRequest": "nicht unterstützte app-server-Anfrage: {method}",
273
+ "adapter.logQuestionNative": "Auswahlanfrage -> Auswahlkarte am Handy questionID={id} (session={session})",
274
+ "adapter.logPermissionNative": "Genehmigungsanfrage -> Genehmigungskarte am Handy permissionID={id} (session={session})",
275
+ "adapter.checkAppServerOk": "codex app-server verfügbar",
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
+ }