@tunnelbox/core 0.1.17 → 0.1.20

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,277 @@
1
- {
2
- "agent.err.createSession": "Échec de la création de la session",
3
- "agent.err.httpClient": "Impossible d'accéder au client HTTP d'opencode",
4
- "agent.err.unknownPerm": "Demande d'autorisation inconnue : {id}",
5
- "agent.err.unknownQuestion": "Demande de question inconnue : {id}",
6
- "agent.log.fallback404": "Le point d'accès préféré a renvoyé 404, bascule sur l'autre : {message}",
7
- "agent.log.gotPermReply": "Réponse d'autorisation reçue du téléphone (id={id} {reply} {version})",
8
- "agent.log.gotQuestionReply": "Réponse de question reçue du téléphone (id={id} {status} {version})",
9
- "agent.log.handleFailed": "Échec du traitement de {type} : {message}",
10
- "agent.log.msgOk": "Récupération des messages OK session={session} data={count} mode={limited} win={win} ms={ms}",
11
- "agent.log.msgFailed": "Échec de la récupération des messages session={session} err={err} ms={ms}",
12
- "agent.log.msgLimitFallback": "limit non pris en charge, repli sur la récupération complète (session={session})",
13
- "agent.log.httpOk": "opencode HTTP {status} {path}",
14
- "agent.log.pendingResent": "session.pending : renvoi de {count} demande(s) en attente pour {session}",
15
- "agent.log.unhandledType": "Type de message non géré : {type}",
16
- "events.log.fwdPermission": "Demande d'autorisation transmise au téléphone (id={id} tool={tool} {version})",
17
- "events.log.sessionDeleted": "session.deleted transmise au téléphone (session={session})",
18
- "events.log.permissionReplied": "opencode a accusé permission.replied (id={id} {response})",
19
- "events.log.questionRejected": "opencode a accusé question.rejected (id={id})",
20
- "events.log.questionReplied": "opencode a accusé question.replied (id={id})",
21
- "index.error.connectRelay": "Impossible de se connecter au relais ; vérifiez son adresse et réessayez",
22
- "index.error.pairTimeout": "Délai d'attente du code d'appairage dépassé (le relais ne répond pas)",
23
- "index.log.claimed": "Lié à votre compte téléphone. Le téléphone se connecte désormais directement depuis « Mes PC » ; plus besoin de scanner",
24
- "index.log.connectedRelay": "Connecté au relais {url}",
25
- "index.log.loaded": "Plugin tunnelbox opencode démarré (v{version})",
26
- "index.log.disconnected": "Déconnecté du relais, reconnexion automatique…",
27
- "index.log.exit": "Arrêté",
28
- "index.log.pairCode": "Code d'appairage généré : {code}",
29
- "index.log.pairingStillClaimed": "Ce code d'appairage sert uniquement à ré-appairer un nouveau téléphone du même compte ; cet ordinateur est déjà lié et reste accessible depuis « Mes ordinateurs » sur votre téléphone.",
30
- "index.log.pairingPreparing": "Connexion au relais et génération du code d'appairage…",
31
- "index.log.permissionToPhone": "Demande d'autorisation → approbation sur téléphone (id={id} tool={tool})",
32
- "index.log.permissionTuiFallback": "App hors ligne ; la demande est gérée par le TUI opencode (id={id} tool={tool})",
33
- "index.log.relayError": "Erreur du relais : {msg}",
34
- "index.log.resetIdentity": "Délié du compte ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
35
- "index.log.unknown": "Inconnu",
36
- "install.codeLine": "Code d'appairage : {code}",
37
- "install.commandInstalled": "Commande installée : {path}",
38
- "install.done": "Terminé. Tentative de connexion au relais pour afficher les informations d'appairage :",
39
- "install.failConnect": "(Impossible de se connecter au relais pour afficher l'appairage — relais injoignable ou version de Node trop ancienne.",
40
- "install.failConnectHint": "Après le redémarrage d'opencode, consultez le QR code du terminal avec --print-logs, ou tapez “afficher le code d'appairage” / /pair dans opencode.)",
41
- "install.hintFresh": "Remarque : le code d'appairage est à usage unique et valide environ 10 minutes. Si vous démarrez opencode plus tard, utilisez les informations imprimées au démarrage ou obtenues via /pair.",
42
- "install.pluginInstalled": "Plugin installé : {path}",
43
- "install.qrUnavailable": "(Rendu du QR indisponible — utilisez le code ci-dessus)",
44
- "install.qrcodeEnsure": "Installation de qrcode dans le répertoire de configuration d'opencode…",
45
- "install.qrcodeFail": "Échec de l'installation de qrcode (sans conséquence — seul le code d'appairage est affiché) : {err}",
46
- "install.relayError": "Le relais a renvoyé une erreur : {msg}",
47
- "install.scanHint": "Ouvrez tunnelbox sur votre téléphone, touchez “Scanner pour appairer”, puis scannez le QR ci-dessus pour connecter :",
48
- "pair.heading": "Appairage téléphone tunnelbox",
49
- "pair.howTo": "Ouvrez l'application tunnelbox sur votre téléphone, scannez le QR ci-dessus avec “Scanner pour appairer”, ou saisissez le code d'appairage manuellement.",
50
- "pair.oneTime": "Le code d'appairage est à usage unique et expire après utilisation ; demandez à “raffraîchir le code d'appairage pour en obtenir un nouveau.",
51
- "pair.promptBody": "Veuillez afficher les informations d'appairage téléphone de cet ordinateur : le code d'appairage et un QR code scannable. Gardez le QR code dans un bloc de code à largeur fixe et reproduisez-le caractère par caractère pour que mon téléphone puisse le scanner.",
52
- "pair.promptDescription": "Afficher le code d'appairage et le QR code scannable",
53
- "pair.scanIntro": "**Appairer par scan** : ouvrez l'application tunnelbox sur votre téléphone, touchez “Scanner pour appairer”, puis scannez le QR ci-dessous pour vous connecter automatiquement.",
54
- "perm.promptAuthorize": "opencode demande une autorisation",
55
- "perm.promptPatterns": "opencode demande l'accès à : {list}",
56
- "perm.promptResource": "opencode demande l'accès aux ressources : {list}",
57
- "perm.promptTool": "opencode demande d'exécuter {tool}",
58
- "qr.codeLabel": "Code d'appairage",
59
- "qr.fileWritten": "Informations d'appairage écrites dans : {path}",
60
- "qr.openHint": "Ouvrez l'application tunnelbox sur votre téléphone et scannez le QR ci-dessus, ou saisissez le code d'appairage manuellement dans l'application.",
61
- "qr.titleNoType": "appairage téléphone tunnelbox",
62
- "qr.titleWithType": "appairage téléphone tunnelbox {type}",
63
- "qr.unavailable": "(qrcode non installé — utilisez le code d'appairage ci-dessus)",
64
- "claude.errBusy": "Cette session est en cours d'exécution ; attendez la fin ou arrêtez-la d'abord",
65
- "claude.errTurn": "erreur de génération",
66
- "claude.pairingStillClaimed": "Déjà lié à un compte téléphone : ce code sert uniquement à appairer un nouvel appareil sur le même compte ; l'appareil actuel se connecte directement depuis Mes ordinateurs",
67
- "claude.pairForced": "--pair : demande forcée d'un code d'appairage (cette exécution uniquement)",
68
- "claude.pairUnclaimed": "Aucun compte lié détecté ; lancement du guide d'appairage :",
69
- "claude.claimedHint": "Lié à un compte téléphone : connectez-vous directement depuis Mes ordinateurs sur le téléphone",
70
- "claude.errStartFailed": "Échec du démarrage :",
71
- "claude.msgStarted": "Adaptateur Claude Code démarré (Ctrl+C pour quitter)",
72
- "claude.warnInvalidMode": "TUNNELBOX_CLAUDE_MODE invalide ignoré : {raw} (autorisé {list})",
73
- "claude.warnInvalidThinking": "TUNNELBOX_CLAUDE_THINKING invalide ignoré : {raw} (off|adaptive|enabled[:budget])",
74
- "claude.cmdNew": "Nouvelle session",
75
- "claude.cmdHelp": "Afficher l'aide",
76
- "claude.errNoRelay": "Aucune URL de relais configurée : injectez une valeur par défaut avec --env, ou remplacez-la via TUNNELBOX_RELAY_URL",
77
- "claude.logConnected": "Connecté au relais {url}",
78
- "claude.logMsgUncaught": "Exception non interceptée lors du traitement du message : {message}",
79
- "claude.reasonDisconnect": "Relais déconnecté (rejet automatique fail-closed)",
80
- "claude.reasonUnbind": "Compte dissocié (rejet automatique fail-closed)",
81
- "claude.logDisconnected": "Déconnecté du relais, reconnexion automatique…",
82
- "claude.logPairCode": "Code d'appairage généré : {code}",
83
- "claude.logUnhandledType": "Type de message non géré : {type}",
84
- "claude.logHandleFailed": "Échec du traitement de {type} : {message}",
85
- "claude.newSessionTitle": "Nouvelle session",
86
- "claude.helpText": "Commandes prises en charge :\n- /new nouvelle session\n- /help afficher l'aide",
87
- "claude.logPromptFailed": "Échec de session.prompt : {message}",
88
- "claude.logAbortSent": "Interruption envoyée (session={session})",
89
- "claude.logAbortFailed": "Échec de l'interruption (session={session}) : {message}",
90
- "claude.errBadWorkspaceEmpty": "Chemin de l'espace de travail manquant",
91
- "claude.errBadWorkspaceNotDir": "Le répertoire n'existe pas ou est inutilisable",
92
- "claude.logWorkspaceSwitched": "Espace de travail changé : {path}",
93
- "claude.logUnknownQuestionReply": "Réponse de question structurée sans correspondance (id={id})",
94
- "claude.logFlushedQuestions": "{count} question(s) en attente annulée(s) : {reason}",
95
- "claude.logFlushedApprovals": "{count} demande(s) en attente rejetée(s) : {reason}",
96
- "claude.logPendingResent": "session.pending : {count} élément(s) en attente renvoyé(s) pour {session}",
97
- "claude.logSetModeFailed": "Échec de setPermissionMode (session={session}) : {message}",
98
- "claude.errWorkspaceMissing": "L'espace de travail n'existe pas : {dir}",
99
- "claude.logSessionError": "Erreur de session (session={session}) : {message}",
100
- "claude.logOfflineDenyTool": "Relais hors ligne, rejet automatique de l'outil {tool}",
101
- "claude.errOfflineDeny": "Relais hors ligne, rejet automatique (fail-closed)",
102
- "claude.logAuqDisabled": "AskUserQuestion désactivé (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), rejet automatique",
103
- "claude.errAuqDisabled": "AskUserQuestion n'est pas activé",
104
- "claude.logAuqParseFailed": "Échec de l'analyse de l'entrée AskUserQuestion, rejet automatique (fail-closed)",
105
- "claude.errAuqParse": "Impossible d'analyser les questions",
106
- "claude.logAuqSkipped": "AskUserQuestion sans réponse/annulée (session={session})",
107
- "claude.errAuqCancelled": "L'utilisateur n'a pas fait de choix (annulé)",
108
- "claude.logAuqDone": "AskUserQuestion répondue (session={session})",
109
- "claude.promptRunTool": "Claude Code demande à exécuter {tool}",
110
- "claude.errApprovalTimeout": "Approbation expirée, rejet automatique (fail-closed)",
111
- "claude.errUserDenied": "Rejeté par l'utilisateur",
112
- "claude.errAborted": "Requête interrompue",
113
- "claude.logPermToPhone": "Demande d'autorisation (tool={tool}) → envoyée au téléphone permissionID={id}",
114
- "claude.errRelayUnreachable": "Relais injoignable, rejet automatique (fail-closed)",
115
- "claude.logQuestionOffline": "Relais hors ligne, question structurée annulée automatiquement",
116
- "claude.logQuestionToPhone": "Question structurée ({count} élément(s)) → envoyée au téléphone questionID={id}",
117
- "claude.logDialogOffline": "Relais hors ligne, dialogue annulé automatiquement ({tool})",
118
- "claude.logDialogToPhone": "Demande de dialogue (kind={kind} tool={tool}) → envoyée au téléphone permissionID={id}",
119
- "claude.logAuqDialogParse": "Échec de l'analyse du payload AskUserQuestion, comportement par défaut conservé (session={session})",
120
- "claude.logDialogUnmapped": "request_user_dialog(kind={kind}) sans correspondance, comportement par défaut conservé (session={session})",
121
- "claude.promptMcpAuth": "MCP « {server} » demande une autorisation",
122
- "claude.logElicitUnmapped": "Élicitation MCP (server={server}, mode={mode}) non traitée, rejet automatique (session={session})",
123
- "claude.logResetIdentity": "Compte dissocié ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
124
- "claude.dialogConfirm": "Claude Code demande une confirmation ({kind})",
125
- "claude.resultTruncated": "… (résultat tronqué)",
126
- "claude.streamError": "erreur de streaming claude",
127
- "claude.errListSessions": "Échec de la lecture de la liste des sessions Claude",
128
- "claude.errReadHistory": "Échec de la lecture de l'historique de session ({id})",
129
- "setup.langSet": "Langue d'exécution définie sur",
130
- "setup.langHint": "L'adaptateur utilisera cette langue au prochain démarrage (TUNNELBOX_LANG peut la remplacer). Fichier d'état :",
131
- "setup.langCurrent": "Langue d'exécution actuelle",
132
- "hermes.errNoRelay": "URL du relais non configurée : utilisez --env pour injecter une valeur par défaut, ou remplacez à l'exécution avec TUNNELBOX_RELAY_URL",
133
- "hermes.logConnected": "Connecté au relais {url}",
134
- "hermes.logMsgUncaught": "Exception non interceptée lors du traitement du message : {message}",
135
- "hermes.logDisconnected": "Déconnecté du relais, reconnexion automatique…",
136
- "hermes.logPairCode": "Code d'appairage généré : {code}",
137
- "hermes.logUnhandledType": "Type de message non traité : {type}",
138
- "hermes.logHandleFailed": "Échec du traitement de {type} : {message}",
139
- "hermes.logClaimed": "Lié à votre compte téléphone. Le téléphone se connecte désormais directement depuis Mes ordinateurs",
140
- "hermes.logResetIdentity": "Dissocié du compte ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
141
- "hermes.cmdNew": "Nouvelle session",
142
- "hermes.cmdHelp": "Afficher l'aide",
143
- "hermes.newSessionTitle": "Nouvelle session",
144
- "hermes.helpText": "Commandes prises en charge :\n- /new nouvelle session\n- /help afficher l'aide",
145
- "hermes.errBusy": "Cette session est en cours de génération ; attendez la fin ou arrêtez-la d'abord",
146
- "hermes.errBadWorkspace": "Ce répertoire n'existe pas ou est inutilisable",
147
- "hermes.logWorkspaceSwitched": "Espace de travail changé : {path}",
148
- "hermes.errWorkspaceMissing": "L'espace de travail n'existe pas : {dir}",
149
- "hermes.errStartFailed": "Échec du démarrage : {message}",
150
- "hermes.msgStarted": "Adaptateur Hermes démarré (Ctrl+C pour quitter)",
151
- "hermes.logAbortSent": "Interruption envoyée (session={session})",
152
- "hermes.logPromptFailed": "session.prompt a échoué : {message}",
153
- "hermes.logTurnError": "Erreur de tour (session={session}) : {message}",
154
- "hermes.logPairForced": "--pair : demande forcée du code d'appairage (cet exécution uniquement)",
155
- "hermes.pairingStillClaimed": "Déjà lié à un compte téléphone : ce code ne sert qu'à réappairer un nouvel appareil sur le même compte ; l'appareil actuel se connecte directement depuis Mes ordinateurs",
156
- "hermes.logPairNoRelay": "Impossible de demander un code d'appairage : URL du relais non configurée",
157
- "hermes.errSpawnHermes": "Impossible de démarrer Hermes ({bin}) : vérifiez qu'il est installé ({err})",
158
- "hermes.errHermesExit": "hermes a quitté ({code}) : {err}",
159
- "hermes.logSessionUpdated": "Session mise à jour (session={session})",
160
- "hermes.errNoInject": "Injection du message téléphone indisponible (session non interactive ou processus non prêt)",
161
- "hermes.pairNoRelay": "Impossible de joindre le relais (relais injoignable ou websockets manquant)",
162
- "hermes.pairTimeout": "Délai dépassé pour le code d'appairage (relais sans réponse)",
163
- "hermes.errToolPair": "échec de tunnelbox_pair : {err}",
164
- "hermes.errToolStatus": "échec de tunnelbox_status : {err}",
165
- "hermes.cliUsage": "Utilisation : /tunnelbox <pair|status>\n pair demander et afficher un code d'appairage\n status afficher l'état relais/liaison/connexion"
166
- }
1
+ {
2
+ "agent.err.createSession": "Échec de la création de la session",
3
+ "agent.err.httpClient": "Impossible d'accéder au client HTTP d'opencode",
4
+ "agent.err.unknownPerm": "Demande d'autorisation inconnue : {id}",
5
+ "agent.err.unknownQuestion": "Demande de question inconnue : {id}",
6
+ "agent.log.fallback404": "Le point d'accès préféré a renvoyé 404, bascule sur l'autre : {message}",
7
+ "agent.log.gotPermReply": "Réponse d'autorisation reçue du téléphone (id={id} {reply} {version})",
8
+ "agent.log.gotQuestionReply": "Réponse de question reçue du téléphone (id={id} {status} {version})",
9
+ "agent.log.handleFailed": "Échec du traitement de {type} : {message}",
10
+ "agent.log.msgOk": "Récupération des messages OK session={session} data={count} mode={limited} win={win} ms={ms}",
11
+ "agent.log.msgFailed": "Échec de la récupération des messages session={session} err={err} ms={ms}",
12
+ "agent.log.msgLimitFallback": "limit non pris en charge, repli sur la récupération complète (session={session})",
13
+ "agent.log.httpOk": "opencode HTTP {status} {path}",
14
+ "agent.log.pendingResent": "session.pending : renvoi de {count} demande(s) en attente pour {session}",
15
+ "agent.log.unhandledType": "Type de message non géré : {type}",
16
+ "events.log.fwdPermission": "Demande d'autorisation transmise au téléphone (id={id} tool={tool} {version})",
17
+ "events.log.sessionDeleted": "session.deleted transmise au téléphone (session={session})",
18
+ "events.log.permissionReplied": "opencode a accusé permission.replied (id={id} {response})",
19
+ "events.log.questionRejected": "opencode a accusé question.rejected (id={id})",
20
+ "events.log.questionReplied": "opencode a accusé question.replied (id={id})",
21
+ "index.error.connectRelay": "Impossible de se connecter au relais ; vérifiez son adresse et réessayez",
22
+ "index.error.pairTimeout": "Délai d'attente du code d'appairage dépassé (le relais ne répond pas)",
23
+ "index.log.claimed": "Lié à votre compte téléphone. Le téléphone se connecte désormais directement depuis « Mes PC » ; plus besoin de scanner",
24
+ "index.log.connectedRelay": "Connecté au relais {url}",
25
+ "index.log.loaded": "Plugin tunnelbox opencode démarré (v{version})",
26
+ "index.log.disconnected": "Déconnecté du relais, reconnexion automatique…",
27
+ "index.log.exit": "Arrêté",
28
+ "index.log.pairCode": "Code d'appairage généré : {code}",
29
+ "index.log.pairingStillClaimed": "Ce code d'appairage sert uniquement à ré-appairer un nouveau téléphone du même compte ; cet ordinateur est déjà lié et reste accessible depuis « Mes ordinateurs » sur votre téléphone.",
30
+ "index.log.pairingPreparing": "Connexion au relais et génération du code d'appairage…",
31
+ "index.log.permissionToPhone": "Demande d'autorisation → approbation sur téléphone (id={id} tool={tool})",
32
+ "index.log.permissionTuiFallback": "App hors ligne ; la demande est gérée par le TUI opencode (id={id} tool={tool})",
33
+ "index.log.relayError": "Erreur du relais : {msg}",
34
+ "index.log.resetIdentity": "Délié du compte ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
35
+ "index.log.unknown": "Inconnu",
36
+ "install.codeLine": "Code d'appairage : {code}",
37
+ "install.commandInstalled": "Commande installée : {path}",
38
+ "install.done": "Terminé. Tentative de connexion au relais pour afficher les informations d'appairage :",
39
+ "install.failConnect": "(Impossible de se connecter au relais pour afficher l'appairage — relais injoignable ou version de Node trop ancienne.",
40
+ "install.failConnectHint": "Après le redémarrage d'opencode, consultez le QR code du terminal avec --print-logs, ou tapez “afficher le code d'appairage” / /pair dans opencode.)",
41
+ "install.hintFresh": "Remarque : le code d'appairage est à usage unique et valide environ 10 minutes. Si vous démarrez opencode plus tard, utilisez les informations imprimées au démarrage ou obtenues via /pair.",
42
+ "install.pluginInstalled": "Plugin installé : {path}",
43
+ "install.qrUnavailable": "(Rendu du QR indisponible — utilisez le code ci-dessus)",
44
+ "install.qrcodeEnsure": "Installation de qrcode dans le répertoire de configuration d'opencode…",
45
+ "install.qrcodeFail": "Échec de l'installation de qrcode (sans conséquence — seul le code d'appairage est affiché) : {err}",
46
+ "install.relayError": "Le relais a renvoyé une erreur : {msg}",
47
+ "install.scanHint": "Ouvrez tunnelbox sur votre téléphone, touchez “Scanner pour appairer”, puis scannez le QR ci-dessus pour connecter :",
48
+ "pair.heading": "Appairage téléphone tunnelbox",
49
+ "pair.howTo": "Ouvrez l'application tunnelbox sur votre téléphone, scannez le QR ci-dessus avec “Scanner pour appairer”, ou saisissez le code d'appairage manuellement.",
50
+ "pair.oneTime": "Le code d'appairage est à usage unique et valable environ 10 minutes ; il devient inutilisable une fois utilisé ou expiré. Demandez « rafraîchir le code d'appairage » pour en obtenir un nouveau.",
51
+ "pair.promptBody": "Veuillez afficher les informations d'appairage téléphone de cet ordinateur : le code d'appairage et un QR code scannable. Gardez le QR code dans un bloc de code à largeur fixe et reproduisez-le caractère par caractère pour que mon téléphone puisse le scanner.",
52
+ "pair.promptDescription": "Afficher le code d'appairage et le QR code scannable",
53
+ "pair.scanIntro": "**Appairer par scan** : ouvrez l'application tunnelbox sur votre téléphone, touchez “Scanner pour appairer”, puis scannez le QR ci-dessous pour vous connecter automatiquement.",
54
+ "perm.promptAuthorize": "opencode demande une autorisation",
55
+ "perm.promptPatterns": "opencode demande l'accès à : {list}",
56
+ "perm.promptResource": "opencode demande l'accès aux ressources : {list}",
57
+ "perm.promptTool": "opencode demande d'exécuter {tool}",
58
+ "qr.codeLabel": "Code d'appairage",
59
+ "qr.fileWritten": "Informations d'appairage écrites dans : {path}",
60
+ "qr.openHint": "Ouvrez l'application tunnelbox sur votre téléphone et scannez le QR ci-dessus, ou saisissez le code d'appairage manuellement dans l'application.",
61
+ "qr.titleNoType": "appairage téléphone tunnelbox",
62
+ "qr.titleWithType": "appairage téléphone tunnelbox {type}",
63
+ "qr.unavailable": "(qrcode non installé — utilisez le code d'appairage ci-dessus)",
64
+ "claude.errBusy": "Cette session est en cours d'exécution ; attendez la fin ou arrêtez-la d'abord",
65
+ "claude.errTurn": "erreur de génération",
66
+ "claude.pairingStillClaimed": "Déjà lié à un compte téléphone : ce code sert uniquement à appairer un nouvel appareil sur le même compte ; l'appareil actuel se connecte directement depuis Mes ordinateurs",
67
+ "claude.pairForced": "--pair : demande forcée d'un code d'appairage (cette exécution uniquement)",
68
+ "claude.pairUnclaimed": "Aucun compte lié détecté ; lancement du guide d'appairage :",
69
+ "claude.claimedHint": "Lié à un compte téléphone : connectez-vous directement depuis Mes ordinateurs sur le téléphone",
70
+ "claude.errStartFailed": "Échec du démarrage :",
71
+ "claude.msgStarted": "Adaptateur Claude Code démarré (Ctrl+C pour quitter)",
72
+ "claude.warnInvalidMode": "TUNNELBOX_CLAUDE_MODE invalide ignoré : {raw} (autorisé {list})",
73
+ "claude.warnInvalidThinking": "TUNNELBOX_CLAUDE_THINKING invalide ignoré : {raw} (off|adaptive|enabled[:budget])",
74
+ "claude.cmdNew": "Nouvelle session",
75
+ "claude.cmdHelp": "Afficher l'aide",
76
+ "claude.errNoRelay": "Aucune URL de relais configurée : injectez une valeur par défaut avec --env, ou remplacez-la via TUNNELBOX_RELAY_URL",
77
+ "claude.logConnected": "Connecté au relais {url}",
78
+ "claude.logMsgUncaught": "Exception non interceptée lors du traitement du message : {message}",
79
+ "claude.reasonDisconnect": "Relais déconnecté (rejet automatique fail-closed)",
80
+ "claude.reasonUnbind": "Compte dissocié (rejet automatique fail-closed)",
81
+ "claude.logDisconnected": "Déconnecté du relais, reconnexion automatique…",
82
+ "claude.logPairCode": "Code d'appairage généré : {code}",
83
+ "claude.logUnhandledType": "Type de message non géré : {type}",
84
+ "claude.logHandleFailed": "Échec du traitement de {type} : {message}",
85
+ "claude.newSessionTitle": "Nouvelle session",
86
+ "claude.helpText": "Commandes prises en charge :\n- /new nouvelle session\n- /help afficher l'aide",
87
+ "claude.logPromptFailed": "Échec de session.prompt : {message}",
88
+ "claude.logAbortSent": "Interruption envoyée (session={session})",
89
+ "claude.logAbortFailed": "Échec de l'interruption (session={session}) : {message}",
90
+ "claude.errBadWorkspaceEmpty": "Chemin de l'espace de travail manquant",
91
+ "claude.errBadWorkspaceNotDir": "Le répertoire n'existe pas ou est inutilisable",
92
+ "claude.logWorkspaceSwitched": "Espace de travail changé : {path}",
93
+ "claude.logUnknownQuestionReply": "Réponse de question structurée sans correspondance (id={id})",
94
+ "claude.logFlushedQuestions": "{count} question(s) en attente annulée(s) : {reason}",
95
+ "claude.logFlushedApprovals": "{count} demande(s) en attente rejetée(s) : {reason}",
96
+ "claude.logPendingResent": "session.pending : {count} élément(s) en attente renvoyé(s) pour {session}",
97
+ "claude.logSetModeFailed": "Échec de setPermissionMode (session={session}) : {message}",
98
+ "claude.errWorkspaceMissing": "L'espace de travail n'existe pas : {dir}",
99
+ "claude.logSessionError": "Erreur de session (session={session}) : {message}",
100
+ "claude.logOfflineDenyTool": "Relais hors ligne, rejet automatique de l'outil {tool}",
101
+ "claude.errOfflineDeny": "Relais hors ligne, rejet automatique (fail-closed)",
102
+ "claude.logAuqDisabled": "AskUserQuestion désactivé (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), rejet automatique",
103
+ "claude.errAuqDisabled": "AskUserQuestion n'est pas activé",
104
+ "claude.logAuqParseFailed": "Échec de l'analyse de l'entrée AskUserQuestion, rejet automatique (fail-closed)",
105
+ "claude.errAuqParse": "Impossible d'analyser les questions",
106
+ "claude.logAuqSkipped": "AskUserQuestion sans réponse/annulée (session={session})",
107
+ "claude.errAuqCancelled": "L'utilisateur n'a pas fait de choix (annulé)",
108
+ "claude.logAuqDone": "AskUserQuestion répondue (session={session})",
109
+ "claude.promptRunTool": "Claude Code demande à exécuter {tool}",
110
+ "claude.errApprovalTimeout": "Approbation expirée, rejet automatique (fail-closed)",
111
+ "claude.errUserDenied": "Rejeté par l'utilisateur",
112
+ "claude.errAborted": "Requête interrompue",
113
+ "claude.logPermToPhone": "Demande d'autorisation (tool={tool}) → envoyée au téléphone permissionID={id}",
114
+ "claude.errRelayUnreachable": "Relais injoignable, rejet automatique (fail-closed)",
115
+ "claude.logQuestionOffline": "Relais hors ligne, question structurée annulée automatiquement",
116
+ "claude.logQuestionToPhone": "Question structurée ({count} élément(s)) → envoyée au téléphone questionID={id}",
117
+ "claude.logDialogOffline": "Relais hors ligne, dialogue annulé automatiquement ({tool})",
118
+ "claude.logDialogToPhone": "Demande de dialogue (kind={kind} tool={tool}) → envoyée au téléphone permissionID={id}",
119
+ "claude.logAuqDialogParse": "Échec de l'analyse du payload AskUserQuestion, comportement par défaut conservé (session={session})",
120
+ "claude.logDialogUnmapped": "request_user_dialog(kind={kind}) sans correspondance, comportement par défaut conservé (session={session})",
121
+ "claude.promptMcpAuth": "MCP « {server} » demande une autorisation",
122
+ "claude.logElicitUnmapped": "Élicitation MCP (server={server}, mode={mode}) non traitée, rejet automatique (session={session})",
123
+ "claude.logResetIdentity": "Compte dissocié ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
124
+ "claude.dialogConfirm": "Claude Code demande une confirmation ({kind})",
125
+ "claude.resultTruncated": "… (résultat tronqué)",
126
+ "claude.streamError": "erreur de streaming claude",
127
+ "claude.errListSessions": "Échec de la lecture de la liste des sessions Claude",
128
+ "claude.errReadHistory": "Échec de la lecture de l'historique de session ({id})",
129
+ "setup.langSet": "Langue d'exécution définie sur",
130
+ "setup.langHint": "L'adaptateur utilisera cette langue au prochain démarrage (TUNNELBOX_LANG peut la remplacer). Fichier d'état :",
131
+ "setup.langCurrent": "Langue d'exécution actuelle",
132
+ "hermes.errNoRelay": "URL du relais non configurée : utilisez --env pour injecter une valeur par défaut, ou remplacez à l'exécution avec TUNNELBOX_RELAY_URL",
133
+ "hermes.logConnected": "Connecté au relais {url}",
134
+ "hermes.logMsgUncaught": "Exception non interceptée lors du traitement du message : {message}",
135
+ "hermes.logDisconnected": "Déconnecté du relais, reconnexion automatique…",
136
+ "hermes.logPairCode": "Code d'appairage généré : {code}",
137
+ "hermes.logUnhandledType": "Type de message non traité : {type}",
138
+ "hermes.logHandleFailed": "Échec du traitement de {type} : {message}",
139
+ "hermes.logClaimed": "Lié à votre compte téléphone. Le téléphone se connecte désormais directement depuis Mes ordinateurs",
140
+ "hermes.logResetIdentity": "Dissocié du compte ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
141
+ "hermes.cmdNew": "Nouvelle session",
142
+ "hermes.cmdHelp": "Afficher l'aide",
143
+ "hermes.newSessionTitle": "Nouvelle session",
144
+ "hermes.helpText": "Commandes prises en charge :\n- /new nouvelle session\n- /help afficher l'aide",
145
+ "hermes.errBusy": "Cette session est en cours de génération ; attendez la fin ou arrêtez-la d'abord",
146
+ "hermes.errBadWorkspace": "Ce répertoire n'existe pas ou est inutilisable",
147
+ "hermes.logWorkspaceSwitched": "Espace de travail changé : {path}",
148
+ "hermes.errWorkspaceMissing": "L'espace de travail n'existe pas : {dir}",
149
+ "hermes.errStartFailed": "Échec du démarrage : {message}",
150
+ "hermes.msgStarted": "Adaptateur Hermes démarré (Ctrl+C pour quitter)",
151
+ "hermes.logAbortSent": "Interruption envoyée (session={session})",
152
+ "hermes.logPromptFailed": "session.prompt a échoué : {message}",
153
+ "hermes.logTurnError": "Erreur de tour (session={session}) : {message}",
154
+ "hermes.logPairForced": "--pair : demande forcée du code d'appairage (cet exécution uniquement)",
155
+ "hermes.pairingStillClaimed": "Déjà lié à un compte téléphone : ce code ne sert qu'à réappairer un nouvel appareil sur le même compte ; l'appareil actuel se connecte directement depuis Mes ordinateurs",
156
+ "hermes.logPairNoRelay": "Impossible de demander un code d'appairage : URL du relais non configurée",
157
+ "hermes.errSpawnHermes": "Impossible de démarrer Hermes ({bin}) : vérifiez qu'il est installé ({err})",
158
+ "hermes.errHermesExit": "hermes a quitté ({code}) : {err}",
159
+ "hermes.logSessionUpdated": "Session mise à jour (session={session})",
160
+ "hermes.errNoInject": "Injection du message téléphone indisponible (session non interactive ou processus non prêt)",
161
+ "hermes.pairNoRelay": "Impossible de joindre le relais (relais injoignable ou websockets manquant)",
162
+ "hermes.pairTimeout": "Délai dépassé pour le code d'appairage (relais sans réponse)",
163
+ "hermes.errToolPair": "échec de tunnelbox_pair : {err}",
164
+ "hermes.errToolStatus": "échec de tunnelbox_status : {err}",
165
+ "hermes.cliUsage": "Utilisation : /tunnelbox <pair|status>\n pair demander et afficher un code d'appairage\n status afficher l'état relais/liaison/connexion",
166
+ "qr.validFor": "Le code d'appairage est valable environ 10 minutes ; s'il expire, récupérez-en un nouveau sur votre ordinateur.",
167
+ "pair.toolDesc": "Affiche les informations d'appairage téléphone de cet ordinateur (code d'appairage et QR code scannable). À appeler lorsque l'utilisateur parle d'appairage, de scan de QR code ou de contrôle de cet ordinateur depuis son téléphone.",
168
+ "pair.toolRefreshDesc": "Demander ou non un nouveau code d'appairage au relais",
169
+ "state.errSaveState": "Échec de l'enregistrement de l'état",
170
+ "adapter.logConnected": "Connecté au relais {url}",
171
+ "adapter.logDisconnected": "Déconnecté du relais, reconnexion automatique…",
172
+ "adapter.logPairCode": "Code d'appairage généré : {code}",
173
+ "adapter.logClaimed": "Associé à votre compte téléphone. Désormais, le téléphone se connecte directement depuis « Mes ordinateurs »",
174
+ "adapter.logResetIdentity": "Dissocié du compte ; réinitialisation de l'identité et génération d'un nouveau code d'appairage…",
175
+ "adapter.logUnhandledType": "Type de message non géré : {type}",
176
+ "adapter.errNoRelay": "Aucune URL de relais configurée : compilez avec --env pour injecter une valeur par défaut, ou remplacez-la à l'exécution avec TUNNELBOX_RELAY_URL",
177
+ "adapter.errBusy": "Cette session est toujours en cours ; attendez la fin ou arrêtez-la d'abord",
178
+ "adapter.errBadWorkspaceEmpty": "Chemin d'espace de travail manquant",
179
+ "adapter.errBadWorkspaceNotDir": "Le répertoire n'existe pas ou est inutilisable",
180
+ "adapter.errWorkspaceMissing": "L'espace de travail n'existe pas : {dir}",
181
+ "adapter.cmdNew": "Nouvelle session",
182
+ "adapter.cmdHelp": "Afficher l'aide",
183
+ "adapter.helpText": "Commandes prises en charge :\n- /new nouvelle session\n- /help afficher l'aide",
184
+ "adapter.newSessionTitle": "Nouvelle session",
185
+ "install.langHelpTitle": "Langues prises en charge par install-local (--lang <tag>) :",
186
+ "install.langHelpExample": "Exemple : npm run install-local -- --lang de-DE",
187
+ "install.unknownLang": "Langue inconnue « {raw} », retour à en-US. Prises en charge : {list}",
188
+ "hermes.errAskRequired": "question est obligatoire",
189
+ "hermes.msgPhoneUnavailable": "Téléphone indisponible ou sans réponse : utilisez le clarify intégré pour poser la question localement, ou décidez par vous-même.",
190
+ "hermes.errClarifyUnavailable": "Prise en charge de clarify indisponible",
191
+ "hermes.errAskFailed": "Échec de tunnelbox_ask : {err}",
192
+ "hermes.errClarifyFailed": "Échec de clarify : {err}",
193
+ "bin.denied": "Refusé depuis votre téléphone",
194
+ "bin.timeout": "Délai d'approbation dépassé (fail-closed)",
195
+ "bin.reqRun": "Claude Code demande d'exécuter {tool}",
196
+ "bin.pairTitle": "Appairage téléphone tunnelbox",
197
+ "bin.pairCodeLine": " Code d'appairage : {code}",
198
+ "bin.pairHint": "Ouvrez l'app tunnelbox, touchez « Scanner pour appairer » et scannez le QR code, ou saisissez le code d'appairage manuellement (usage unique).",
199
+ "bin.pairWritten": " Infos d'appairage écrites dans : {path}",
200
+ "bin.pairRequestFailed": "Échec de la demande de code d'appairage au relais.",
201
+ "bin.alreadyClaimed": "Cet ordinateur est déjà associé à un compte téléphone ; connectez-vous directement depuis « Mes ordinateurs ». Pour réappairer, dissociez-le d'abord sur votre téléphone.",
202
+ "bin.noRelay": "Aucune URL de relais configurée : définissez TUNNELBOX_RELAY_URL puis réessayez.",
203
+ "bin.connectFailed": "Impossible de se connecter au relais : {relay}\nDéfinissez TUNNELBOX_RELAY_URL ou configurez-le dans le fichier d'état official-plugin.",
204
+ "bin.statusRelay": "Relais : {value}",
205
+ "bin.statusAgent": "ID de l'agent : {value}",
206
+ "bin.statusClaimed": "Téléphone associé : {value}",
207
+ "bin.statusStateFile": "Fichier d'état : {value}",
208
+ "bin.statusLatest": "Dernières infos d'appairage :",
209
+ "bin.usage": "Utilisation : tunnelbox <pair|status|ask>",
210
+ "bin.usagePair": " pair demander et afficher un code d'appairage téléphone",
211
+ "bin.usageStatus": " status afficher l'état du relais/de l'association",
212
+ "bin.usageAsk": " ask transférer une approbation d'outil au téléphone",
213
+ "adapter.logMsgUncaught": "Exception non interceptée lors du traitement du message : {message}",
214
+ "adapter.logHandleFailed": "Échec du traitement de {type} : {message}",
215
+ "adapter.logPromptFailed": "Échec de session.prompt : {message}",
216
+ "adapter.logAbortSent": "Interruption envoyée (session={session})",
217
+ "adapter.errUserDenied": "Refusé par l'utilisateur",
218
+ "adapter.logPendingResent": "session.pending : {count} demande(s) en attente renvoyée(s)",
219
+ "adapter.logWorkspaceSwitched": "Espace de travail changé : {path}",
220
+ "adapter.logNewSession": "Nouvelle session enregistrée codexId={codexId} (alias={session})",
221
+ "adapter.logSessionError": "Erreur de tour (session={session}) : {message}",
222
+ "adapter.logDshSent": "Envoyé à dsh (session={session})",
223
+ "adapter.logReadHistoryFailed": "Échec de lecture de l'historique de session ({session}) : {message}",
224
+ "adapter.logAnswererInitFailed": "Échec d'initialisation du répondeur : {message}",
225
+ "adapter.logRemoteMode": "Mode double affichage : les sélections/approbations passent par la diffusion multi-clients typert ; téléphone et dsh web partagent la vue, la première réponse l'emporte",
226
+ "adapter.logRemoteProbeFailed": "Échec de détection de la source d'événements distante typert ; retour au mode de réponse local : {message}",
227
+ "adapter.logLocalMode": "Mode de réponse local : sélections/approbations traitées par le téléphone (headless, sans diffusion dsh web)",
228
+ "adapter.logRemoteStreamInterrupted": "Flux remote events interrompu : {message}",
229
+ "adapter.logResultRejected": "$events/result non accepté ({eventId}) : {message}",
230
+ "adapter.logResultBackfillFailed": "Échec du renvoi de $events/result ({eventId}) : {message}",
231
+ "adapter.logRemoteQuestion": "Diffusion de question remote → carte de question téléphone questionID={id} (session={session})",
232
+ "adapter.errRemoteReadyFrame": "Première trame remote events inattendue",
233
+ "adapter.logRemoteApproval": "Diffusion d'approbation remote → carte d'autorisation téléphone permissionID={id} (session={session})",
234
+ "adapter.logUserQuestionRoute": "Sélection user-questions → routée vers session={session}",
235
+ "adapter.errDshQuestionEmpty": "Le contenu de la question dsh est vide",
236
+ "adapter.errQuestionTimeout": "Délai de question dépassé ({seconds}s), annulée",
237
+ "adapter.errQuestionCancelledAbort": "Question annulée (agent interrompu)",
238
+ "adapter.errQuestionCancelledRelay": "Relais injoignable, question annulée",
239
+ "adapter.logQuestionToPhone": "Sélection user-questions → envoyée à la carte de question du téléphone questionID={id} (session={session})",
240
+ "adapter.errQuestionUserCancelled": "L'utilisateur a annulé/refusé la question sur le téléphone",
241
+ "adapter.logApprovalRequest": "Demande d'approbation (tool={tool}) → envoyée à la carte d'autorisation du téléphone permissionID={id}",
242
+ "adapter.logAgentPresetFailed": "Échec de résolution d'agentPreset ({preset}) ; retour sans preset : {message}",
243
+ "adapter.logSessionLiveAdopted": "La session {session} est déjà détenue par un autre agent de ce processus (live) ; adoption de l'agent existant pour continuer : {message}",
244
+ "adapter.logDisposeSkipped": "L'agent live externe adopté n'exécute pas dispose (la session {session} est gérée par son détenteur d'origine)",
245
+ "adapter.logAgentCreateFailed": "Échec de création/reprise de l'agent ({session}) : {message}",
246
+ "adapter.errSessionBusyLive": "La session {session} est occupée (live) ; réessayez plus tard",
247
+ "adapter.errAgentsUnavailable": "Service agents indisponible",
248
+ "adapter.logToolReason": "dsh demande d'exécuter l'outil {tool}",
249
+ "adapter.logGatewayConnected": "Connecté au Gateway OpenClaw local ({version})",
250
+ "adapter.logGatewayDisconnected": "Déconnecté du Gateway OpenClaw ; le client officiel se reconnecte…",
251
+ "adapter.logGatewayConnectFailed": "Impossible de se connecter au Gateway OpenClaw local (la première fois, approuvez l'appareil en local : `openclaw devices list` + `openclaw devices approve <requestId>`)",
252
+ "adapter.errGatewayNoSessionKey": "Le Gateway n'a pas renvoyé de clé de session",
253
+ "adapter.logDeleteSessionFailed": "Échec de suppression de session ({session}) : {message} (accusé de suppression tout de même)",
254
+ "adapter.logApprovalReplyFailed": "Échec de la réponse d'approbation ({id}) : {message}",
255
+ "adapter.logPendingApproval": "session.pending : {count} approbation(s) en attente renvoyée(s) (session={session})",
256
+ "adapter.workspaceDefault": "Par défaut",
257
+ "adapter.cursorSessionTitle": "Session Cursor",
258
+ "adapter.reasonDisconnect": "Relais déconnecté, refus automatique (fail-closed)",
259
+ "adapter.warnInvalidEnv": "Valeur {name} invalide ignorée : {raw} ({list})",
260
+ "adapter.errStartFailed": "Échec du démarrage :",
261
+ "adapter.msgStarted": "Adaptateur {name} démarré (Ctrl+C pour quitter)",
262
+ "adapter.warnCliMissing": "Exécutable « {bin} » introuvable ; installez-le (ex. npm i -g @openai/codex) ou définissez TUNNELBOX_CODEX_BIN avec son chemin",
263
+ "adapter.errCliNotFound": "Exécutable {name} « {bin} » introuvable : installez le Codex CLI (npm i -g @openai/codex) ou définissez TUNNELBOX_CODEX_BIN",
264
+ "adapter.errSessionNotFound": "Session introuvable ou déjà supprimée",
265
+ "adapter.checkHeader": "Vérification de l'environnement tunnelbox-codex",
266
+ "adapter.checkCliOk": "Exécutable {name} : {path}",
267
+ "adapter.checkCliMissing": "Exécutable {name} introuvable ({bin})",
268
+ "bin.yes": "oui",
269
+ "bin.no": "non",
270
+ "adapter.errAppServerSpawn": "Impossible de démarrer codex app-server : {message} (vérifiez que votre Codex CLI prend en charge `codex app-server`)",
271
+ "adapter.errAppServerExit": "codex app-server s'est arrêté ; les approbations/choix en attente ont été refusés automatiquement",
272
+ "adapter.logUnsupportedServerRequest": "requête app-server non prise en charge : {method}",
273
+ "adapter.logQuestionNative": "demande de choix -> carte de choix du téléphone questionID={id} (session={session})",
274
+ "adapter.logPermissionNative": "demande d'approbation -> carte d'approbation du téléphone permissionID={id} (session={session})",
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)"
277
+ }