@tunnelbox/claude-code 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +359 -118
- package/official-plugin/bin/tunnelbox.mjs +3 -10
- package/official-plugin/skills/pair/SKILL.md +2 -2
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -134,30 +134,28 @@ var zh_CN_default = {
|
|
|
134
134
|
"install.failConnect": "\uFF08\u672A\u80FD\u5373\u65F6\u8FDE\u63A5\u4E2D\u7EE7\u6253\u5370\u914D\u5BF9\u4FE1\u606F\u2014\u2014\u4E2D\u7EE7\u4E0D\u53EF\u8FBE\u6216\u5F53\u524D Node \u8FC7\u65E7\u3002",
|
|
135
135
|
"install.failConnectHint": "\u91CD\u542F opencode \u540E\u53EF\u7528 --print-logs \u67E5\u770B\u7EC8\u7AEF\u4E8C\u7EF4\u7801\uFF0C\u6216\u5728 opencode \u5185\u8F93\u5165\u201C\u663E\u793A\u624B\u673A\u914D\u5BF9\u7801\u201D\u6216 /pair\u3002\uFF09",
|
|
136
136
|
"install.hintFresh": "\u63D0\u793A\uFF1A\u914D\u5BF9\u7801\u4E3A\u4E00\u6B21\u6027\uFF0C\u7EA6 10 \u5206\u949F\u6709\u6548\uFF1B\u82E5\u7A0D\u540E\u624D\u542F\u52A8 opencode\uFF0C\u4EE5\u542F\u52A8\u65F6\u7EC8\u7AEF\u6253\u5370\u6216 /pair \u53D6\u5F97\u7684\u6700\u65B0\u914D\u5BF9\u4FE1\u606F\u4E3A\u51C6\u3002",
|
|
137
|
-
"install.linkLine": "\u914D\u5BF9\u94FE\u63A5: {link}",
|
|
138
137
|
"install.pluginInstalled": "\u5DF2\u5B89\u88C5\u63D2\u4EF6: {path}",
|
|
139
|
-
"install.qrUnavailable": "\uFF08\u4E8C\u7EF4\u7801\u6E32\u67D3\u4E0D\u53EF\u7528\uFF0C\u8BF7\u4F7F\u7528\u4E0A\u65B9\u914D\u5BF9\
|
|
138
|
+
"install.qrUnavailable": "\uFF08\u4E8C\u7EF4\u7801\u6E32\u67D3\u4E0D\u53EF\u7528\uFF0C\u8BF7\u4F7F\u7528\u4E0A\u65B9\u914D\u5BF9\u7801\uFF09",
|
|
140
139
|
"install.qrcodeEnsure": "\u5B89\u88C5 qrcode \u5230 opencode \u914D\u7F6E\u76EE\u5F55\u2026",
|
|
141
|
-
"install.qrcodeFail": "qrcode \u5B89\u88C5\u5931\u8D25\uFF08\u4E0D\u5F71\u54CD\u4F7F\u7528\uFF0C\
|
|
140
|
+
"install.qrcodeFail": "qrcode \u5B89\u88C5\u5931\u8D25\uFF08\u4E0D\u5F71\u54CD\u4F7F\u7528\uFF0C\u4EC5\u663E\u793A\u914D\u5BF9\u7801\uFF09: {err}",
|
|
142
141
|
"install.relayError": "\u4E2D\u7EE7\u8FD4\u56DE\u9519\u8BEF: {msg}",
|
|
143
|
-
"install.scanHint": "\u624B\u673A\u6253\u5F00 tunnelbox App\u300C\u626B\u4E00\u626B\u914D\u5BF9\u300D\
|
|
142
|
+
"install.scanHint": "\u624B\u673A\u6253\u5F00 tunnelbox App\u300C\u626B\u4E00\u626B\u914D\u5BF9\u300D\uFF0C\u626B\u63CF\u4E0A\u65B9\u4E8C\u7EF4\u7801\u5373\u53EF\u8FDE\u63A5\uFF1A",
|
|
144
143
|
"pair.heading": "tunnelbox \u624B\u673A\u914D\u5BF9",
|
|
145
|
-
"pair.howTo": "\u5728\u624B\u673A\
|
|
144
|
+
"pair.howTo": "\u5728\u624B\u673A\u4E0A\u6253\u5F00 tunnelbox App\uFF0C\u7528\u300C\u626B\u4E00\u626B\u914D\u5BF9\u300D\u626B\u63CF\u4E0A\u65B9\u4E8C\u7EF4\u7801\uFF0C\u6216\u624B\u52A8\u8F93\u5165\u914D\u5BF9\u7801\u3002",
|
|
146
145
|
"pair.oneTime": "\u914D\u5BF9\u7801\u4E3A\u4E00\u6B21\u6027\uFF0C\u4F7F\u7528\u540E\u5373\u5931\u6548\uFF1B\u5982\u9700\u65B0\u7801\uFF0C\u53EF\u8981\u6C42\u201C\u5237\u65B0\u914D\u5BF9\u7801\u201D\u3002",
|
|
147
|
-
"pair.promptBody": "\u8BF7\u5E2E\u6211\u67E5\u770B\u672C\u673A\u624B\u673A\u8FDC\u7A0B\u914D\u5BF9\u4FE1\u606F\uFF1A\u663E\u793A\u914D\u5BF9\u7801\
|
|
148
|
-
"pair.promptDescription": "\u663E\u793A\u624B\u673A\u8FDC\u7A0B\u914D\u5BF9\u7684\u914D\u5BF9\u7801\
|
|
149
|
-
"pair.scanIntro": "**\u626B\u4E00\u626B\u914D\u5BF9**\uFF1A\u624B\u673A\u6253\u5F00 tunnelbox App\u300C\u626B\u4E00\u626B\u914D\u5BF9\u300D\
|
|
146
|
+
"pair.promptBody": "\u8BF7\u5E2E\u6211\u67E5\u770B\u672C\u673A\u624B\u673A\u8FDC\u7A0B\u914D\u5BF9\u4FE1\u606F\uFF1A\u663E\u793A\u914D\u5BF9\u7801\u4E0E\u53EF\u4F9B\u626B\u7801\u7684\u4E8C\u7EF4\u7801\u3002\u4E8C\u7EF4\u7801\u8BF7\u653E\u5728\u7B49\u5BBD\u4EE3\u7801\u5757\u91CC\u5E76\u9010\u5B57\u539F\u6837\u4FDD\u7559\uFF0C\u65B9\u4FBF\u6211\u7528\u624B\u673A\u626B\u7801\u3002",
|
|
147
|
+
"pair.promptDescription": "\u663E\u793A\u624B\u673A\u8FDC\u7A0B\u914D\u5BF9\u7684\u914D\u5BF9\u7801\u4E0E\u626B\u7801\u4E8C\u7EF4\u7801",
|
|
148
|
+
"pair.scanIntro": "**\u626B\u4E00\u626B\u914D\u5BF9**\uFF1A\u624B\u673A\u6253\u5F00 tunnelbox App\u300C\u626B\u4E00\u626B\u914D\u5BF9\u300D\uFF0C\u626B\u63CF\u4E0B\u65B9\u4E8C\u7EF4\u7801\u5373\u53EF\u81EA\u52A8\u8FDE\u63A5\u3002",
|
|
150
149
|
"perm.promptAuthorize": "opencode \u8BF7\u6C42\u6388\u6743",
|
|
151
150
|
"perm.promptPatterns": "opencode \u8BF7\u6C42\u8BBF\u95EE\uFF1A{list}",
|
|
152
151
|
"perm.promptResource": "opencode \u8BF7\u6C42\u8BBF\u95EE\u8D44\u6E90\uFF1A{list}",
|
|
153
152
|
"perm.promptTool": "opencode \u8BF7\u6C42\u6267\u884C {tool}",
|
|
154
153
|
"qr.codeLabel": "\u914D\u5BF9\u7801",
|
|
155
154
|
"qr.fileWritten": "\u914D\u5BF9\u4FE1\u606F\u5DF2\u5199\u5165: {path}",
|
|
156
|
-
"qr.
|
|
157
|
-
"qr.openHint": "\u624B\u673A\u6D4F\u89C8\u5668\u6253\u5F00\u94FE\u63A5\uFF0C\u6216\u6253\u5F00 App \u540E\u624B\u52A8\u8F93\u5165\u914D\u5BF9\u7801\u3002",
|
|
155
|
+
"qr.openHint": "\u6253\u5F00 tunnelbox App\uFF0C\u7528\u300C\u626B\u4E00\u626B\u914D\u5BF9\u300D\u626B\u63CF\u4E0A\u65B9\u4E8C\u7EF4\u7801\uFF0C\u6216\u624B\u52A8\u8F93\u5165\u914D\u5BF9\u7801\u3002",
|
|
158
156
|
"qr.titleNoType": "tunnelbox \u624B\u673A\u914D\u5BF9",
|
|
159
157
|
"qr.titleWithType": "tunnelbox {type} \u624B\u673A\u914D\u5BF9",
|
|
160
|
-
"qr.unavailable": "\uFF08\u672A\u5B89\u88C5 qrcode\uFF0C\u8BF7\u4F7F\u7528\u4E0A\u65B9\
|
|
158
|
+
"qr.unavailable": "\uFF08\u672A\u5B89\u88C5 qrcode\uFF0C\u8BF7\u4F7F\u7528\u4E0A\u65B9\u914D\u5BF9\u7801\uFF09",
|
|
161
159
|
"claude.errBusy": "\u8BE5\u4F1A\u8BDD\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210\u6216\u5148\u505C\u6B62",
|
|
162
160
|
"claude.errTurn": "\u751F\u6210\u51FA\u9519",
|
|
163
161
|
"claude.pairingStillClaimed": "\u5DF2\u7ED1\u5B9A\u624B\u673A\u8D26\u53F7\uFF1A\u6B64\u914D\u5BF9\u7801\u4EC5\u7528\u4E8E\u540C\u8D26\u53F7\u65B0\u8BBE\u5907\u91CD\u65B0\u914D\u5BF9\uFF0C\u5F53\u524D\u8BBE\u5907\u53EF\u76F4\u63A5\u4ECE\u624B\u673A\u300C\u6211\u7684\u7535\u8111\u300D\u8FDE\u63A5",
|
|
@@ -225,7 +223,41 @@ var zh_CN_default = {
|
|
|
225
223
|
"claude.errReadHistory": "\u8BFB\u53D6\u4F1A\u8BDD\u5386\u53F2\u5931\u8D25({id})",
|
|
226
224
|
"setup.langSet": "\u5DF2\u8BBE\u7F6E\u8FD0\u884C\u8BED\u8A00",
|
|
227
225
|
"setup.langHint": "\u91CD\u542F\u9002\u914D\u5668\u540E\u6309\u8BE5\u8BED\u8A00\u8F93\u51FA\uFF08\u8FD0\u884C\u65F6\u53EF\u88AB TUNNELBOX_LANG \u8986\u76D6\uFF09\u3002\u72B6\u6001\u6587\u4EF6\uFF1A",
|
|
228
|
-
"setup.langCurrent": "\u5F53\u524D\u8FD0\u884C\u8BED\u8A00"
|
|
226
|
+
"setup.langCurrent": "\u5F53\u524D\u8FD0\u884C\u8BED\u8A00",
|
|
227
|
+
"hermes.errNoRelay": "\u672A\u914D\u7F6E\u4E2D\u7EE7\u5730\u5740\uFF1A\u6784\u5EFA\u8BF7\u7528 --env \u6CE8\u5165\u9ED8\u8BA4\uFF0C\u8FD0\u884C\u53EF\u7528 TUNNELBOX_RELAY_URL \u8986\u76D6",
|
|
228
|
+
"hermes.logConnected": "\u5DF2\u8FDE\u63A5\u4E2D\u7EE7 {url}",
|
|
229
|
+
"hermes.logMsgUncaught": "\u6D88\u606F\u5904\u7406\u672A\u6355\u83B7\u5F02\u5E38: {message}",
|
|
230
|
+
"hermes.logDisconnected": "\u4E0E\u4E2D\u7EE7\u65AD\u5F00\uFF0C\u6B63\u5728\u81EA\u52A8\u91CD\u8FDE\u2026",
|
|
231
|
+
"hermes.logPairCode": "\u751F\u6210\u914D\u5BF9\u7801: {code}",
|
|
232
|
+
"hermes.logUnhandledType": "\u672A\u5904\u7406\u7684\u6D88\u606F\u7C7B\u578B: {type}",
|
|
233
|
+
"hermes.logHandleFailed": "\u5904\u7406 {type} \u5931\u8D25: {message}",
|
|
234
|
+
"hermes.logClaimed": "\u5DF2\u7ED1\u5B9A\u5230\u624B\u673A\u8D26\u53F7\uFF0C\u4E4B\u540E\u624B\u673A\u4ECE\u300C\u6211\u7684\u7535\u8111\u300D\u76F4\u63A5\u8FDE\u63A5",
|
|
235
|
+
"hermes.logResetIdentity": "\u88AB\u8D26\u53F7\u89E3\u7ED1\uFF0C\u6B63\u5728\u91CD\u7F6E\u8EAB\u4EFD\u5E76\u91CD\u65B0\u751F\u6210\u914D\u5BF9\u7801\u2026",
|
|
236
|
+
"hermes.cmdNew": "\u65B0\u5EFA\u4F1A\u8BDD",
|
|
237
|
+
"hermes.cmdHelp": "\u663E\u793A\u5E2E\u52A9",
|
|
238
|
+
"hermes.newSessionTitle": "\u65B0\u4F1A\u8BDD",
|
|
239
|
+
"hermes.helpText": "\u652F\u6301\u7684\u547D\u4EE4\uFF1A\n- /new \u65B0\u5EFA\u4F1A\u8BDD\n- /help \u663E\u793A\u5E2E\u52A9",
|
|
240
|
+
"hermes.errBusy": "\u8BE5\u4F1A\u8BDD\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210\u6216\u5148\u505C\u6B62",
|
|
241
|
+
"hermes.errBadWorkspace": "\u8BE5\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u53EF\u7528",
|
|
242
|
+
"hermes.logWorkspaceSwitched": "\u5207\u6362\u5DE5\u4F5C\u533A: {path}",
|
|
243
|
+
"hermes.errWorkspaceMissing": "\u5DE5\u4F5C\u533A\u4E0D\u5B58\u5728: {dir}",
|
|
244
|
+
"hermes.errStartFailed": "\u542F\u52A8\u5931\u8D25: {message}",
|
|
245
|
+
"hermes.msgStarted": "Hermes \u9002\u914D\u5668\u5DF2\u542F\u52A8\uFF08Ctrl+C \u9000\u51FA\uFF09",
|
|
246
|
+
"hermes.logAbortSent": "\u5DF2\u53D1\u9001\u4E2D\u6B62 (session={session})",
|
|
247
|
+
"hermes.logPromptFailed": "session.prompt \u5931\u8D25: {message}",
|
|
248
|
+
"hermes.logTurnError": "\u56DE\u5408\u51FA\u9519 (session={session}): {message}",
|
|
249
|
+
"hermes.logPairForced": "--pair\uFF1A\u5DF2\u5F3A\u5236\u7533\u8BF7\u914D\u5BF9\u7801\uFF08\u4EC5\u672C\u6B21\uFF09",
|
|
250
|
+
"hermes.pairingStillClaimed": "\u5DF2\u7ED1\u5B9A\u624B\u673A\u8D26\u53F7\uFF1A\u6B64\u914D\u5BF9\u7801\u4EC5\u7528\u4E8E\u540C\u8D26\u53F7\u65B0\u8BBE\u5907\u91CD\u65B0\u914D\u5BF9\uFF0C\u5F53\u524D\u8BBE\u5907\u53EF\u76F4\u63A5\u4ECE\u624B\u673A\u300C\u6211\u7684\u7535\u8111\u300D\u8FDE\u63A5",
|
|
251
|
+
"hermes.logPairNoRelay": "\u672A\u914D\u7F6E\u4E2D\u7EE7\u5730\u5740\uFF0C\u65E0\u6CD5\u7533\u8BF7\u914D\u5BF9\u7801",
|
|
252
|
+
"hermes.errSpawnHermes": "\u65E0\u6CD5\u542F\u52A8 Hermes\uFF08{bin}\uFF09\uFF1A\u8BF7\u786E\u8BA4\u5DF2\u5B89\u88C5\uFF08{err}\uFF09",
|
|
253
|
+
"hermes.errHermesExit": "hermes \u9000\u51FA({code}): {err}",
|
|
254
|
+
"hermes.logSessionUpdated": "\u4F1A\u8BDD\u5DF2\u66F4\u65B0 (session={session})",
|
|
255
|
+
"hermes.errNoInject": "\u624B\u673A\u6D88\u606F\u6CE8\u5165\u4E0D\u53EF\u7528\uFF08\u5F53\u524D\u4F1A\u8BDD\u975E\u4EA4\u4E92\u5F0F\u6216\u8FDB\u7A0B\u672A\u5C31\u7EEA\uFF09",
|
|
256
|
+
"hermes.pairNoRelay": "\u65E0\u6CD5\u8FDE\u63A5\u4E2D\u7EE7\uFF08relay \u4E0D\u53EF\u8FBE\u6216 websockets \u7F3A\u5931\uFF09",
|
|
257
|
+
"hermes.pairTimeout": "\u7533\u8BF7\u914D\u5BF9\u7801\u8D85\u65F6\uFF08\u4E2D\u7EE7\u672A\u54CD\u5E94\uFF09",
|
|
258
|
+
"hermes.errToolPair": "tunnelbox_pair \u5931\u8D25: {err}",
|
|
259
|
+
"hermes.errToolStatus": "tunnelbox_status \u5931\u8D25: {err}",
|
|
260
|
+
"hermes.cliUsage": "\u7528\u6CD5: /tunnelbox <pair|status>\n pair \u5411\u4E2D\u7EE7\u7533\u8BF7\u624B\u673A\u914D\u5BF9\u7801\u5E76\u6253\u5370\n status \u663E\u793A\u4E2D\u7EE7/\u7ED1\u5B9A/\u8FDE\u63A5\u72B6\u6001"
|
|
229
261
|
};
|
|
230
262
|
|
|
231
263
|
// ../core/locales/zh-TW.json
|
|
@@ -263,30 +295,28 @@ var zh_TW_default = {
|
|
|
263
295
|
"install.failConnect": "\uFF08\u672A\u80FD\u5373\u6642\u9023\u63A5\u4E2D\u7E7C\u5217\u5370\u914D\u5C0D\u8CC7\u8A0A\u2014\u2014\u4E2D\u7E7C\u7121\u6CD5\u9023\u7DDA\u6216\u76EE\u524D Node \u904E\u820A\u3002",
|
|
264
296
|
"install.failConnectHint": "\u91CD\u555F opencode \u5F8C\u53EF\u7528 --print-logs \u67E5\u770B\u7D42\u7AEF QR Code\uFF0C\u6216\u662F\u5728 opencode \u5167\u8F38\u5165\u300C\u986F\u793A\u624B\u6A5F\u914D\u5C0D\u78BC\u300D\u6216 /pair\u3002\uFF09",
|
|
265
297
|
"install.hintFresh": "\u63D0\u793A\uFF1A\u914D\u5C0D\u78BC\u70BA\u4E00\u6B21\u6027\uFF0C\u7D04 10 \u5206\u9418\u6709\u6548\uFF1B\u82E5\u7A0D\u5F8C\u624D\u555F\u52D5 opencode\uFF0C\u4EE5\u555F\u52D5\u6642\u7D42\u7AEF\u5217\u5370\u6216 /pair \u53D6\u5F97\u7684\u6700\u65B0\u914D\u5C0D\u8CC7\u8A0A\u70BA\u6E96\u3002",
|
|
266
|
-
"install.linkLine": "\u914D\u5C0D\u9023\u7D50: {link}",
|
|
267
298
|
"install.pluginInstalled": "\u5DF2\u5B89\u88DD\u5916\u639B: {path}",
|
|
268
|
-
"install.qrUnavailable": "\uFF08QR Code \u7121\u6CD5\u986F\u793A\uFF0C\u8ACB\u4F7F\u7528\u4E0A\u65B9\u914D\u5C0D\
|
|
299
|
+
"install.qrUnavailable": "\uFF08QR Code \u7121\u6CD5\u986F\u793A\uFF0C\u8ACB\u4F7F\u7528\u4E0A\u65B9\u914D\u5C0D\u78BC\uFF09",
|
|
269
300
|
"install.qrcodeEnsure": "\u6B63\u5728\u5C07 qrcode \u5B89\u88DD\u5230 opencode \u8A2D\u5B9A\u76EE\u9304\u2026",
|
|
270
|
-
"install.qrcodeFail": "qrcode \u5B89\u88DD\u5931\u6557\uFF08\u4E0D\u5F71\u97FF\u4F7F\u7528\
|
|
301
|
+
"install.qrcodeFail": "qrcode \u5B89\u88DD\u5931\u6557\uFF08\u4E0D\u5F71\u97FF\u4F7F\u7528\uFF0C\u50C5\u986F\u793A\u914D\u5C0D\u78BC\uFF09: {err}",
|
|
271
302
|
"install.relayError": "\u4E2D\u7E7C\u50B3\u56DE\u932F\u8AA4: {msg}",
|
|
272
|
-
"install.scanHint": "\u624B\u6A5F\u958B\u555F tunnelbox App\u300C\u6383\u63CF\u914D\u5C0D\u300D\uFF0C\
|
|
303
|
+
"install.scanHint": "\u624B\u6A5F\u958B\u555F tunnelbox App\u300C\u6383\u63CF\u914D\u5C0D\u300D\uFF0C\u6383\u63CF\u4E0A\u65B9 QR Code \u5373\u53EF\u9023\u63A5\uFF1A",
|
|
273
304
|
"pair.heading": "tunnelbox \u624B\u6A5F\u914D\u5C0D",
|
|
274
|
-
"pair.howTo": "\u5728\u624B\u6A5F\
|
|
305
|
+
"pair.howTo": "\u5728\u624B\u6A5F\u4E0A\u958B\u555F tunnelbox App\uFF0C\u7528\u300C\u6383\u63CF\u914D\u5C0D\u300D\u6383\u63CF\u4E0A\u65B9 QR Code\uFF0C\u6216\u624B\u52D5\u8F38\u5165\u914D\u5C0D\u78BC\u3002",
|
|
275
306
|
"pair.oneTime": "\u914D\u5C0D\u78BC\u70BA\u4E00\u6B21\u6027\uFF0C\u4F7F\u7528\u5F8C\u5373\u5931\u6548\uFF1B\u5982\u9700\u65B0\u78BC\uFF0C\u53EF\u8981\u6C42\u300C\u91CD\u65B0\u6574\u7406\u914D\u5C0D\u78BC\u300D\u3002",
|
|
276
|
-
"pair.promptBody": "\u8ACB\u5E6B\u6211\u67E5\u770B\u672C\u6A5F\u624B\u6A5F\u9060\u7AEF\u914D\u5C0D\u8CC7\u8A0A\uFF1A\u986F\u793A\u914D\u5C0D\u78BC\
|
|
277
|
-
"pair.promptDescription": "\u986F\u793A\u624B\u6A5F\u9060\u7AEF\u914D\u5C0D\u7684\u914D\u5C0D\u78BC\
|
|
278
|
-
"pair.scanIntro": "**\u6383\u78BC\u914D\u5C0D**\uFF1A\u624B\u6A5F\u958B\u555F tunnelbox App\u300C\u6383\u63CF\u914D\u5C0D\u300D\uFF0C\
|
|
307
|
+
"pair.promptBody": "\u8ACB\u5E6B\u6211\u67E5\u770B\u672C\u6A5F\u624B\u6A5F\u9060\u7AEF\u914D\u5C0D\u8CC7\u8A0A\uFF1A\u986F\u793A\u914D\u5C0D\u78BC\u8207\u53EF\u4F9B\u6383\u78BC\u7684 QR Code\u3002QR Code \u8ACB\u653E\u5728\u7B49\u5BEC\u7A0B\u5F0F\u78BC\u5340\u584A\u5167\u4E26\u9010\u5B57\u539F\u6A23\u4FDD\u7559\uFF0C\u65B9\u4FBF\u6211\u7528\u624B\u6A5F\u6383\u63CF\u3002",
|
|
308
|
+
"pair.promptDescription": "\u986F\u793A\u624B\u6A5F\u9060\u7AEF\u914D\u5C0D\u7684\u914D\u5C0D\u78BC\u8207\u6383\u78BC QR Code",
|
|
309
|
+
"pair.scanIntro": "**\u6383\u78BC\u914D\u5C0D**\uFF1A\u624B\u6A5F\u958B\u555F tunnelbox App\u300C\u6383\u63CF\u914D\u5C0D\u300D\uFF0C\u6383\u63CF\u4E0B\u65B9 QR Code \u5373\u53EF\u81EA\u52D5\u9023\u63A5\u3002",
|
|
279
310
|
"perm.promptAuthorize": "opencode \u8ACB\u6C42\u6388\u6B0A",
|
|
280
311
|
"perm.promptPatterns": "opencode \u8ACB\u6C42\u5B58\u53D6\uFF1A{list}",
|
|
281
312
|
"perm.promptResource": "opencode \u8ACB\u6C42\u5B58\u53D6\u8CC7\u6E90\uFF1A{list}",
|
|
282
313
|
"perm.promptTool": "opencode \u8ACB\u6C42\u57F7\u884C {tool}",
|
|
283
314
|
"qr.codeLabel": "\u914D\u5C0D\u78BC",
|
|
284
315
|
"qr.fileWritten": "\u914D\u5C0D\u8CC7\u8A0A\u5DF2\u5BEB\u5165: {path}",
|
|
285
|
-
"qr.
|
|
286
|
-
"qr.openHint": "\u5728\u624B\u6A5F\u700F\u89BD\u5668\u958B\u555F\u9023\u7D50\uFF0C\u6216\u5728 App \u4E2D\u624B\u52D5\u8F38\u5165\u914D\u5C0D\u78BC\u3002",
|
|
316
|
+
"qr.openHint": "\u958B\u555F tunnelbox App\uFF0C\u7528\u300C\u6383\u63CF\u914D\u5C0D\u300D\u6383\u63CF\u4E0A\u65B9 QR Code\uFF0C\u6216\u624B\u52D5\u8F38\u5165\u914D\u5C0D\u78BC\u3002",
|
|
287
317
|
"qr.titleNoType": "tunnelbox \u624B\u6A5F\u914D\u5C0D",
|
|
288
318
|
"qr.titleWithType": "tunnelbox {type} \u624B\u6A5F\u914D\u5C0D",
|
|
289
|
-
"qr.unavailable": "\uFF08\u672A\u5B89\u88DD qrcode\uFF0C\u8ACB\u4F7F\u7528\u4E0A\u65B9\
|
|
319
|
+
"qr.unavailable": "\uFF08\u672A\u5B89\u88DD qrcode\uFF0C\u8ACB\u4F7F\u7528\u4E0A\u65B9\u914D\u5C0D\u78BC\uFF09",
|
|
290
320
|
"claude.errBusy": "\u8A72\u6703\u8A71\u6B63\u5728\u7522\u751F\u4E2D\uFF0C\u8ACB\u7B49\u5F85\u5B8C\u6210\u6216\u5148\u505C\u6B62",
|
|
291
321
|
"claude.errTurn": "\u7522\u751F\u51FA\u932F",
|
|
292
322
|
"claude.pairingStillClaimed": "\u5DF2\u7D81\u5B9A\u624B\u6A5F\u5E33\u865F\uFF1A\u6B64\u914D\u5C0D\u78BC\u50C5\u4F9B\u540C\u5E33\u865F\u65B0\u88DD\u7F6E\u91CD\u65B0\u914D\u5C0D\uFF0C\u76EE\u524D\u88DD\u7F6E\u53EF\u76F4\u63A5\u5F9E\u624B\u6A5F\u300C\u6211\u7684\u96FB\u8166\u300D\u9023\u63A5",
|
|
@@ -354,7 +384,41 @@ var zh_TW_default = {
|
|
|
354
384
|
"claude.errReadHistory": "\u8B80\u53D6\u6703\u8A71\u6B77\u53F2\u5931\u6557({id})",
|
|
355
385
|
"setup.langSet": "\u5DF2\u8A2D\u5B9A\u57F7\u884C\u8A9E\u8A00",
|
|
356
386
|
"setup.langHint": "\u91CD\u65B0\u555F\u52D5\u4ECB\u9762\u5361\u5F8C\u5C07\u4EE5\u8A72\u8A9E\u8A00\u8F38\u51FA\uFF08\u57F7\u884C\u6642\u53EF\u88AB TUNNELBOX_LANG \u8986\u5BEB\uFF09\u3002\u72C0\u614B\u6A94\uFF1A",
|
|
357
|
-
"setup.langCurrent": "\u76EE\u524D\u57F7\u884C\u8A9E\u8A00"
|
|
387
|
+
"setup.langCurrent": "\u76EE\u524D\u57F7\u884C\u8A9E\u8A00",
|
|
388
|
+
"hermes.errNoRelay": "\u672A\u8A2D\u5B9A\u4E2D\u7E7C\u4F4D\u5740\uFF1A\u5EFA\u7F6E\u8ACB\u7528 --env \u6CE8\u5165\u9810\u8A2D\uFF0C\u57F7\u884C\u53EF\u7528 TUNNELBOX_RELAY_URL \u8986\u5BEB",
|
|
389
|
+
"hermes.logConnected": "\u5DF2\u9023\u7DDA\u4E2D\u7E7C {url}",
|
|
390
|
+
"hermes.logMsgUncaught": "\u8A0A\u606F\u8655\u7406\u672A\u6355\u7372\u4F8B\u5916: {message}",
|
|
391
|
+
"hermes.logDisconnected": "\u8207\u4E2D\u7E7C\u65B7\u7DDA\uFF0C\u6B63\u5728\u81EA\u52D5\u91CD\u65B0\u9023\u7DDA\u2026",
|
|
392
|
+
"hermes.logPairCode": "\u7522\u751F\u914D\u5C0D\u78BC: {code}",
|
|
393
|
+
"hermes.logUnhandledType": "\u672A\u8655\u7406\u7684\u8A0A\u606F\u985E\u578B: {type}",
|
|
394
|
+
"hermes.logHandleFailed": "\u8655\u7406 {type} \u5931\u6557: {message}",
|
|
395
|
+
"hermes.logClaimed": "\u5DF2\u7D81\u5B9A\u5230\u624B\u6A5F\u5E33\u865F\uFF0C\u4E4B\u5F8C\u624B\u6A5F\u5F9E\u300C\u6211\u7684\u96FB\u8166\u300D\u76F4\u63A5\u9023\u7DDA",
|
|
396
|
+
"hermes.logResetIdentity": "\u88AB\u5E33\u865F\u89E3\u7D81\uFF0C\u6B63\u5728\u91CD\u8A2D\u8EAB\u5206\u4E26\u91CD\u65B0\u7522\u751F\u914D\u5C0D\u78BC\u2026",
|
|
397
|
+
"hermes.cmdNew": "\u65B0\u589E\u6703\u8A71",
|
|
398
|
+
"hermes.cmdHelp": "\u986F\u793A\u8AAA\u660E",
|
|
399
|
+
"hermes.newSessionTitle": "\u65B0\u6703\u8A71",
|
|
400
|
+
"hermes.helpText": "\u652F\u63F4\u7684\u547D\u4EE4\uFF1A\n- /new \u65B0\u589E\u6703\u8A71\n- /help \u986F\u793A\u8AAA\u660E",
|
|
401
|
+
"hermes.errBusy": "\u6B64\u6703\u8A71\u6B63\u5728\u7522\u751F\u4E2D\uFF0C\u8ACB\u7B49\u5F85\u5B8C\u6210\u6216\u5148\u505C\u6B62",
|
|
402
|
+
"hermes.errBadWorkspace": "\u6B64\u76EE\u9304\u4E0D\u5B58\u5728\u6216\u7121\u6CD5\u4F7F\u7528",
|
|
403
|
+
"hermes.logWorkspaceSwitched": "\u5207\u63DB\u5DE5\u4F5C\u5340: {path}",
|
|
404
|
+
"hermes.errWorkspaceMissing": "\u5DE5\u4F5C\u5340\u4E0D\u5B58\u5728: {dir}",
|
|
405
|
+
"hermes.errStartFailed": "\u555F\u52D5\u5931\u6557: {message}",
|
|
406
|
+
"hermes.msgStarted": "Hermes \u4ECB\u63A5\u5668\u5DF2\u555F\u52D5\uFF08Ctrl+C \u9000\u51FA\uFF09",
|
|
407
|
+
"hermes.logAbortSent": "\u5DF2\u50B3\u9001\u4E2D\u6B62 (session={session})",
|
|
408
|
+
"hermes.logPromptFailed": "session.prompt \u5931\u6557: {message}",
|
|
409
|
+
"hermes.logTurnError": "\u56DE\u5408\u51FA\u932F (session={session}): {message}",
|
|
410
|
+
"hermes.logPairForced": "--pair\uFF1A\u5DF2\u5F37\u5236\u7533\u8ACB\u914D\u5C0D\u78BC\uFF08\u50C5\u672C\u6B21\uFF09",
|
|
411
|
+
"hermes.pairingStillClaimed": "\u5DF2\u7D81\u5B9A\u624B\u6A5F\u5E33\u865F\uFF1A\u6B64\u914D\u5C0D\u78BC\u50C5\u4F9B\u540C\u5E33\u865F\u65B0\u88DD\u7F6E\u91CD\u65B0\u914D\u5C0D\uFF0C\u76EE\u524D\u88DD\u7F6E\u53EF\u76F4\u63A5\u5F9E\u624B\u6A5F\u300C\u6211\u7684\u96FB\u8166\u300D\u9023\u7DDA",
|
|
412
|
+
"hermes.logPairNoRelay": "\u672A\u8A2D\u5B9A\u4E2D\u7E7C\u4F4D\u5740\uFF0C\u7121\u6CD5\u7533\u8ACB\u914D\u5C0D\u78BC",
|
|
413
|
+
"hermes.errSpawnHermes": "\u7121\u6CD5\u555F\u52D5 Hermes\uFF08{bin}\uFF09\uFF1A\u8ACB\u78BA\u8A8D\u5DF2\u5B89\u88DD\uFF08{err}\uFF09",
|
|
414
|
+
"hermes.errHermesExit": "hermes \u9000\u51FA({code}): {err}",
|
|
415
|
+
"hermes.logSessionUpdated": "\u6703\u8A71\u5DF2\u66F4\u65B0 (session={session})",
|
|
416
|
+
"hermes.errNoInject": "\u624B\u6A5F\u8A0A\u606F\u6CE8\u5165\u4E0D\u53EF\u7528\uFF08\u76EE\u524D\u5DE5\u4F5C\u968E\u6BB5\u975E\u4E92\u52D5\u5F0F\u6216\u8655\u7406\u7A0B\u5E8F\u672A\u5C31\u7DD2\uFF09",
|
|
417
|
+
"hermes.pairNoRelay": "\u7121\u6CD5\u9023\u7DDA\u4E2D\u7E7C\uFF08relay \u4E0D\u53EF\u9054\u6216 websockets \u7F3A\u5931\uFF09",
|
|
418
|
+
"hermes.pairTimeout": "\u7533\u8ACB\u914D\u5C0D\u78BC\u903E\u6642\uFF08\u4E2D\u7E7C\u672A\u56DE\u61C9\uFF09",
|
|
419
|
+
"hermes.errToolPair": "tunnelbox_pair \u5931\u6557: {err}",
|
|
420
|
+
"hermes.errToolStatus": "tunnelbox_status \u5931\u6557: {err}",
|
|
421
|
+
"hermes.cliUsage": "\u7528\u6CD5: /tunnelbox <pair|status>\n pair \u5411\u4E2D\u7E7C\u7533\u8ACB\u624B\u6A5F\u914D\u5C0D\u78BC\u4E26\u5217\u5370\n status \u986F\u793A\u4E2D\u7E7C/\u7D81\u5B9A/\u9023\u7DDA\u72C0\u614B"
|
|
358
422
|
};
|
|
359
423
|
|
|
360
424
|
// ../core/locales/en-US.json
|
|
@@ -392,30 +456,28 @@ var en_US_default = {
|
|
|
392
456
|
"install.failConnect": "(Could not connect to the relay to print pairing info \u2014 the relay may be unreachable or the Node version is too old.",
|
|
393
457
|
"install.failConnectHint": "After restarting opencode, check the terminal QR code with --print-logs, or type \u201Cshow phone pairing code\u201D / /pair inside opencode.)",
|
|
394
458
|
"install.hintFresh": "Note: the pairing code is single-use and valid for about 10 minutes. If you start opencode later, use the latest pairing info printed at startup or obtained via /pair.",
|
|
395
|
-
"install.linkLine": "Pairing link: {link}",
|
|
396
459
|
"install.pluginInstalled": "Installed plugin: {path}",
|
|
397
|
-
"install.qrUnavailable": "(QR rendering unavailable \u2014 use the pairing
|
|
460
|
+
"install.qrUnavailable": "(QR rendering unavailable \u2014 use the pairing code above)",
|
|
398
461
|
"install.qrcodeEnsure": "Installing qrcode into the opencode config directory\u2026",
|
|
399
|
-
"install.qrcodeFail": "qrcode installation failed (not critical \u2014 the
|
|
462
|
+
"install.qrcodeFail": "qrcode installation failed (not critical \u2014 only the pairing code is shown): {err}",
|
|
400
463
|
"install.relayError": "Relay returned an error: {msg}",
|
|
401
|
-
"install.scanHint": "Open tunnelbox on your phone, tap \u201CScan to pair\u201D,
|
|
464
|
+
"install.scanHint": "Open tunnelbox on your phone, tap \u201CScan to pair\u201D, and scan the QR code above to connect:",
|
|
402
465
|
"pair.heading": "tunnelbox phone pairing",
|
|
403
|
-
"pair.howTo": "Open the
|
|
466
|
+
"pair.howTo": "Open the tunnelbox app on your phone and scan the QR code above with \u201CScan to pair\u201D, or enter the pairing code manually.",
|
|
404
467
|
"pair.oneTime": "The pairing code is single-use and invalidates after it is claimed; ask to \u201Crefresh the pairing code\u201D for a new one.",
|
|
405
|
-
"pair.promptBody": "Please show this computer's phone pairing info: the pairing code
|
|
406
|
-
"pair.promptDescription": "Show the phone pairing code
|
|
407
|
-
"pair.scanIntro": "**Pair by scanning**: open the tunnelbox app on your phone
|
|
468
|
+
"pair.promptBody": "Please show this computer's phone pairing info: the pairing code and a QR code I can scan. Keep the QR code inside a monospaced code block and reproduce it character-for-character so my phone can scan it.",
|
|
469
|
+
"pair.promptDescription": "Show the phone pairing code and scan-able QR code",
|
|
470
|
+
"pair.scanIntro": "**Pair by scanning**: open the tunnelbox app on your phone, tap \u201CScan to pair\u201D, and scan the QR code below to connect automatically.",
|
|
408
471
|
"perm.promptAuthorize": "opencode requests authorization",
|
|
409
472
|
"perm.promptPatterns": "opencode requests access to: {list}",
|
|
410
473
|
"perm.promptResource": "opencode requests access to resources: {list}",
|
|
411
474
|
"perm.promptTool": "opencode requests to run {tool}",
|
|
412
475
|
"qr.codeLabel": "Pairing code",
|
|
413
476
|
"qr.fileWritten": "Pairing info written to: {path}",
|
|
414
|
-
"qr.
|
|
415
|
-
"qr.openHint": "Open the link in your phone browser, or enter the pairing code manually in the app.",
|
|
477
|
+
"qr.openHint": "Open the tunnelbox app on your phone and scan the QR code above, or enter the pairing code manually in the app.",
|
|
416
478
|
"qr.titleNoType": "tunnelbox phone pairing",
|
|
417
479
|
"qr.titleWithType": "tunnelbox {type} phone pairing",
|
|
418
|
-
"qr.unavailable": "(qrcode not installed \u2014 use the
|
|
480
|
+
"qr.unavailable": "(qrcode not installed \u2014 use the pairing code above)",
|
|
419
481
|
"claude.errBusy": "This session is still running; wait for it to finish or stop it first",
|
|
420
482
|
"claude.errTurn": "generation error",
|
|
421
483
|
"claude.pairingStillClaimed": "Already bound to a phone account: this code is only for pairing a new device on the same account; the current device connects directly from My Computers",
|
|
@@ -483,7 +545,41 @@ var en_US_default = {
|
|
|
483
545
|
"claude.errReadHistory": "Failed to read session history ({id})",
|
|
484
546
|
"setup.langSet": "Runtime language set to",
|
|
485
547
|
"setup.langHint": "The adapter will output in this language after restart (runtime TUNNELBOX_LANG can override). State file:",
|
|
486
|
-
"setup.langCurrent": "Current runtime language"
|
|
548
|
+
"setup.langCurrent": "Current runtime language",
|
|
549
|
+
"hermes.errNoRelay": "No relay URL configured: build with --env to inject a default, or override at runtime with TUNNELBOX_RELAY_URL",
|
|
550
|
+
"hermes.logConnected": "Connected to relay {url}",
|
|
551
|
+
"hermes.logMsgUncaught": "Uncaught exception while handling message: {message}",
|
|
552
|
+
"hermes.logDisconnected": "Disconnected from relay, reconnecting automatically\u2026",
|
|
553
|
+
"hermes.logPairCode": "Generated pairing code: {code}",
|
|
554
|
+
"hermes.logUnhandledType": "Unhandled message type: {type}",
|
|
555
|
+
"hermes.logHandleFailed": "Failed to handle {type}: {message}",
|
|
556
|
+
"hermes.logClaimed": "Bound to your phone account. From now on the phone connects directly from My Computers",
|
|
557
|
+
"hermes.logResetIdentity": "Unbound from the account; resetting identity and generating a new pairing code\u2026",
|
|
558
|
+
"hermes.cmdNew": "New session",
|
|
559
|
+
"hermes.cmdHelp": "Show help",
|
|
560
|
+
"hermes.newSessionTitle": "New session",
|
|
561
|
+
"hermes.helpText": "Supported commands:\n- /new new session\n- /help show help",
|
|
562
|
+
"hermes.errBusy": "This session is still running; wait for it to finish or stop it first",
|
|
563
|
+
"hermes.errBadWorkspace": "Directory does not exist or is unusable",
|
|
564
|
+
"hermes.logWorkspaceSwitched": "Switched workspace: {path}",
|
|
565
|
+
"hermes.errWorkspaceMissing": "Workspace does not exist: {dir}",
|
|
566
|
+
"hermes.errStartFailed": "Failed to start: {message}",
|
|
567
|
+
"hermes.msgStarted": "Hermes adapter started (Ctrl+C to quit)",
|
|
568
|
+
"hermes.logAbortSent": "Abort sent (session={session})",
|
|
569
|
+
"hermes.logPromptFailed": "session.prompt failed: {message}",
|
|
570
|
+
"hermes.logTurnError": "Turn error (session={session}): {message}",
|
|
571
|
+
"hermes.logPairForced": "--pair: forcing a pairing code request (this run only)",
|
|
572
|
+
"hermes.pairingStillClaimed": "Already bound to a phone account: this code is only for pairing a new device on the same account; the current device connects directly from My Computers",
|
|
573
|
+
"hermes.logPairNoRelay": "Cannot request a pairing code: no relay URL configured",
|
|
574
|
+
"hermes.errSpawnHermes": "Cannot start Hermes ({bin}): please confirm it is installed ({err})",
|
|
575
|
+
"hermes.errHermesExit": "hermes exited ({code}): {err}",
|
|
576
|
+
"hermes.logSessionUpdated": "Session updated (session={session})",
|
|
577
|
+
"hermes.errNoInject": "Phone message injection unavailable (session not interactive or process not ready)",
|
|
578
|
+
"hermes.pairNoRelay": "Cannot reach the relay (relay unreachable or websockets missing)",
|
|
579
|
+
"hermes.pairTimeout": "Timed out requesting a pairing code (relay did not respond)",
|
|
580
|
+
"hermes.errToolPair": "tunnelbox_pair failed: {err}",
|
|
581
|
+
"hermes.errToolStatus": "tunnelbox_status failed: {err}",
|
|
582
|
+
"hermes.cliUsage": "Usage: /tunnelbox <pair|status>\n pair request and print a phone pairing code\n status show relay/binding/connection status"
|
|
487
583
|
};
|
|
488
584
|
|
|
489
585
|
// ../core/locales/ja-JP.json
|
|
@@ -521,30 +617,28 @@ var ja_JP_default = {
|
|
|
521
617
|
"install.failConnect": "\uFF08\u30DA\u30A2\u30EA\u30F3\u30B0\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B\u305F\u3081\u30EA\u30EC\u30FC\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F \u2014 \u30EA\u30EC\u30FC\u306B\u5230\u9054\u3067\u304D\u306A\u3044\u304B Node \u304C\u53E4\u3059\u304E\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002",
|
|
522
618
|
"install.failConnectHint": "opencode \u3092\u518D\u8D77\u52D5\u5F8C\u3001--print-logs \u3067\u30BF\u30FC\u30DF\u30CA\u30EB\u306E QR \u30B3\u30FC\u30C9\u3092\u78BA\u8A8D\u3059\u308B\u304B\u3001opencode \u5185\u3067\u300C\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u8868\u793A\u300D\u307E\u305F\u306F /pair \u3068\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\uFF09",
|
|
523
619
|
"install.hintFresh": "\u6CE8\u610F\uFF1A\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u306F\u4E00\u5EA6\u304D\u308A\u3067\u3001\u7D04 10 \u5206\u9593\u6709\u52B9\u3067\u3059\u3002\u5F8C\u304B\u3089 opencode \u3092\u8D77\u52D5\u3059\u308B\u5834\u5408\u306F\u3001\u8D77\u52D5\u6642\u306B\u8868\u793A\u3055\u308C\u308B\u304B /pair \u3067\u53D6\u5F97\u3057\u305F\u6700\u65B0\u60C5\u5831\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
524
|
-
"install.linkLine": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30EA\u30F3\u30AF: {link}",
|
|
525
620
|
"install.pluginInstalled": "\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB: {path}",
|
|
526
|
-
"install.qrUnavailable": "\uFF08QR \u30B3\u30FC\u30C9\u3092\u8868\u793A\u3067\u304D\u307E\u305B\u3093 \u2014 \u4E0A\u8A18\u306E\
|
|
621
|
+
"install.qrUnavailable": "\uFF08QR \u30B3\u30FC\u30C9\u3092\u8868\u793A\u3067\u304D\u307E\u305B\u3093 \u2014 \u4E0A\u8A18\u306E\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
527
622
|
"install.qrcodeEnsure": "qrcode \u3092 opencode \u8A2D\u5B9A\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u3044\u307E\u3059\u2026",
|
|
528
|
-
"install.qrcodeFail": "qrcode \u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u4F7F\u7528\u306B\u306F\u5F71\u97FF\u305B\u305A\
|
|
623
|
+
"install.qrcodeFail": "qrcode \u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u4F7F\u7528\u306B\u306F\u5F71\u97FF\u305B\u305A\u3001\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u306E\u307F\u8868\u793A\u3055\u308C\u307E\u3059\uFF09: {err}",
|
|
529
624
|
"install.relayError": "\u30EA\u30EC\u30FC\u304C\u30A8\u30E9\u30FC\u3092\u8FD4\u3057\u307E\u3057\u305F: {msg}",
|
|
530
|
-
"install.scanHint": "\u30B9\u30DE\u30DB\u3067 tunnelbox App\u300C\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30DA\u30A2\u30EA\u30F3\u30B0\u300D\u3092\u958B\
|
|
625
|
+
"install.scanHint": "\u30B9\u30DE\u30DB\u3067 tunnelbox App\u300C\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30DA\u30A2\u30EA\u30F3\u30B0\u300D\u3092\u958B\u304D\u3001\u4E0A\u306E QR \u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u63A5\u7D9A\uFF1A",
|
|
531
626
|
"pair.heading": "tunnelbox \u30B9\u30DE\u30DB\u30DA\u30A2\u30EA\u30F3\u30B0",
|
|
532
|
-
"pair.howTo": "\u30B9\u30DE\u30DB\
|
|
627
|
+
"pair.howTo": "\u30B9\u30DE\u30DB\u3067 tunnelbox App \u3092\u958B\u304D\u3001\u300C\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30DA\u30A2\u30EA\u30F3\u30B0\u300D\u3067\u4E0A\u306E QR \u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3059\u308B\u304B\u3001\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u624B\u52D5\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
533
628
|
"pair.oneTime": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u306F\u4E00\u5EA6\u304D\u308A\u3067\u3001\u4F7F\u7528\u5F8C\u306F\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002\u65B0\u3057\u3044\u30B3\u30FC\u30C9\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F\u300C\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u66F4\u65B0\u300D\u3068\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
534
|
-
"pair.promptBody": "\u3053\u306E PC \u306E\u30B9\u30DE\u30DB\u9060\u9694\u30DA\u30A2\u30EA\u30F3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\
|
|
535
|
-
"pair.promptDescription": "\u30B9\u30DE\u30DB\u9060\u9694\u30DA\u30A2\u30EA\u30F3\u30B0\u306E\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u30FB\
|
|
536
|
-
"pair.scanIntro": "**\u30B9\u30AD\u30E3\u30F3\u3067\u30DA\u30A2\u30EA\u30F3\u30B0**\uFF1A\u30B9\u30DE\u30DB\u3067 tunnelbox App\u300C\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30DA\u30A2\u30EA\u30F3\u30B0\u300D\u3092\u958B\
|
|
629
|
+
"pair.promptBody": "\u3053\u306E PC \u306E\u30B9\u30DE\u30DB\u9060\u9694\u30DA\u30A2\u30EA\u30F3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3068\u3001\u30B9\u30AD\u30E3\u30F3\u3067\u304D\u308B QR \u30B3\u30FC\u30C9\u3002QR \u30B3\u30FC\u30C9\u306F\u7B49\u5E45\u30B3\u30FC\u30C9\u30D6\u30ED\u30C3\u30AF\u306B\u5165\u308C\u30011 \u6587\u5B57\u3082\u5909\u3048\u305A\u305D\u306E\u307E\u307E\u51FA\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30B9\u30DE\u30DB\u3067\u30B9\u30AD\u30E3\u30F3\u3067\u304D\u308B\u3088\u3046\u306B\u3059\u308B\u305F\u3081\u3067\u3059\u3002",
|
|
630
|
+
"pair.promptDescription": "\u30B9\u30DE\u30DB\u9060\u9694\u30DA\u30A2\u30EA\u30F3\u30B0\u306E\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u30FB\u30B9\u30AD\u30E3\u30F3\u7528 QR \u30B3\u30FC\u30C9\u3092\u8868\u793A",
|
|
631
|
+
"pair.scanIntro": "**\u30B9\u30AD\u30E3\u30F3\u3067\u30DA\u30A2\u30EA\u30F3\u30B0**\uFF1A\u30B9\u30DE\u30DB\u3067 tunnelbox App\u300C\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30DA\u30A2\u30EA\u30F3\u30B0\u300D\u3092\u958B\u304D\u3001\u4E0B\u306E QR \u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3059\u308B\u3068\u81EA\u52D5\u7684\u306B\u63A5\u7D9A\u3055\u308C\u307E\u3059\u3002",
|
|
537
632
|
"perm.promptAuthorize": "opencode \u304C\u8A8D\u53EF\u3092\u8981\u6C42\u3057\u3066\u3044\u307E\u3059",
|
|
538
633
|
"perm.promptPatterns": "opencode \u304C\u30A2\u30AF\u30BB\u30B9\u3092\u8981\u6C42: {list}",
|
|
539
634
|
"perm.promptResource": "opencode \u304C\u30EA\u30BD\u30FC\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8981\u6C42: {list}",
|
|
540
635
|
"perm.promptTool": "opencode \u304C {tool} \u306E\u5B9F\u884C\u3092\u8981\u6C42",
|
|
541
636
|
"qr.codeLabel": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9",
|
|
542
637
|
"qr.fileWritten": "\u30DA\u30A2\u30EA\u30F3\u30B0\u60C5\u5831\u3092\u66F8\u304D\u8FBC\u307F\u307E\u3057\u305F: {path}",
|
|
543
|
-
"qr.
|
|
544
|
-
"qr.openHint": "\u30B9\u30DE\u30DB\u306E\u30D6\u30E9\u30A6\u30B6\u3067\u30EA\u30F3\u30AF\u3092\u958B\u304F\u304B\u3001App \u3067\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u624B\u52D5\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
638
|
+
"qr.openHint": "tunnelbox App \u3092\u958B\u304D\u3001\u4E0A\u306E QR \u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3059\u308B\u304B\u3001App \u3067\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u624B\u52D5\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
545
639
|
"qr.titleNoType": "tunnelbox \u30B9\u30DE\u30DB\u30DA\u30A2\u30EA\u30F3\u30B0",
|
|
546
640
|
"qr.titleWithType": "tunnelbox {type} \u30B9\u30DE\u30DB\u30DA\u30A2\u30EA\u30F3\u30B0",
|
|
547
|
-
"qr.unavailable": "\uFF08qrcode \u304C\u672A\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB \u2014 \u4E0A\u8A18\u306E\
|
|
641
|
+
"qr.unavailable": "\uFF08qrcode \u304C\u672A\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB \u2014 \u4E0A\u8A18\u306E\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
548
642
|
"claude.errBusy": "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306F\u5B9F\u884C\u4E2D\u3067\u3059\u3002\u5B8C\u4E86\u3059\u308B\u307E\u3067\u304A\u5F85\u3061\u3044\u305F\u3060\u304F\u304B\u3001\u5148\u306B\u505C\u6B62\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
549
643
|
"claude.errTurn": "\u751F\u6210\u30A8\u30E9\u30FC",
|
|
550
644
|
"claude.pairingStillClaimed": "\u3059\u3067\u306B\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u7D10\u4ED8\u3051\u6E08\u307F\u3067\u3059\u3002\u3053\u306E\u30B3\u30FC\u30C9\u306F\u540C\u3058\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u65B0\u3057\u3044\u7AEF\u672B\u306E\u30DA\u30A2\u30EA\u30F3\u30B0\u5C02\u7528\u3067\u3059\u3002\u73FE\u5728\u306E\u7AEF\u672B\u306F\u300C\u30DE\u30A4\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u300D\u304B\u3089\u76F4\u63A5\u63A5\u7D9A\u3067\u304D\u307E\u3059",
|
|
@@ -612,7 +706,41 @@ var ja_JP_default = {
|
|
|
612
706
|
"claude.errReadHistory": "\u30BB\u30C3\u30B7\u30E7\u30F3\u5C65\u6B74\u306E\u8AAD\u307F\u53D6\u308A\u306B\u5931\u6557\uFF08{id}\uFF09",
|
|
613
707
|
"setup.langSet": "\u5B9F\u884C\u8A00\u8A9E\u3092\u8A2D\u5B9A\u3057\u307E\u3057\u305F",
|
|
614
708
|
"setup.langHint": "\u518D\u8D77\u52D5\u5F8C\u306B\u3053\u306E\u8A00\u8A9E\u3067\u51FA\u529B\u3057\u307E\u3059\uFF08\u5B9F\u884C\u6642\u306F TUNNELBOX_LANG \u3067\u4E0A\u66F8\u304D\u53EF\u80FD\uFF09\u3002\u72B6\u614B\u30D5\u30A1\u30A4\u30EB\uFF1A",
|
|
615
|
-
"setup.langCurrent": "\u73FE\u5728\u306E\u5B9F\u884C\u8A00\u8A9E"
|
|
709
|
+
"setup.langCurrent": "\u73FE\u5728\u306E\u5B9F\u884C\u8A00\u8A9E",
|
|
710
|
+
"hermes.errNoRelay": "\u30EA\u30EC\u30FCURL\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF1A--env \u3067\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u6CE8\u5165\u3001\u5B9F\u884C\u6642\u306F TUNNELBOX_RELAY_URL \u3067\u4E0A\u66F8\u304D\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
711
|
+
"hermes.logConnected": "\u30EA\u30EC\u30FC\u306B\u63A5\u7D9A\u3057\u307E\u3057\u305F {url}",
|
|
712
|
+
"hermes.logMsgUncaught": "\u30E1\u30C3\u30BB\u30FC\u30B8\u51E6\u7406\u4E2D\u306E\u672A\u6355\u6349\u4F8B\u5916: {message}",
|
|
713
|
+
"hermes.logDisconnected": "\u30EA\u30EC\u30FC\u304B\u3089\u5207\u65AD\u3001\u81EA\u52D5\u518D\u63A5\u7D9A\u4E2D\u2026",
|
|
714
|
+
"hermes.logPairCode": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u751F\u6210: {code}",
|
|
715
|
+
"hermes.logUnhandledType": "\u672A\u51E6\u7406\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u30BF\u30A4\u30D7: {type}",
|
|
716
|
+
"hermes.logHandleFailed": "{type} \u306E\u51E6\u7406\u306B\u5931\u6557: {message}",
|
|
717
|
+
"hermes.logClaimed": "\u30B9\u30DE\u30DB\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u30D0\u30A4\u30F3\u30C9\u3057\u307E\u3057\u305F\u3002\u4EE5\u5F8C\u306F\u30B9\u30DE\u30DB\u306E\u300C\u30DE\u30A4\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u300D\u304B\u3089\u76F4\u63A5\u63A5\u7D9A\u3057\u307E\u3059",
|
|
718
|
+
"hermes.logResetIdentity": "\u30A2\u30AB\u30A6\u30F3\u30C8\u304B\u3089\u30D0\u30A4\u30F3\u30C9\u89E3\u9664\u3001ID\u3092\u30EA\u30BB\u30C3\u30C8\u3057\u3066\u65B0\u3057\u3044\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u751F\u6210\u4E2D\u2026",
|
|
719
|
+
"hermes.cmdNew": "\u65B0\u898F\u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
720
|
+
"hermes.cmdHelp": "\u30D8\u30EB\u30D7\u3092\u8868\u793A",
|
|
721
|
+
"hermes.newSessionTitle": "\u65B0\u898F\u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
722
|
+
"hermes.helpText": "\u30B5\u30DD\u30FC\u30C8\u30B3\u30DE\u30F3\u30C9\uFF1A\n- /new \u65B0\u898F\u30BB\u30C3\u30B7\u30E7\u30F3\n- /help \u30D8\u30EB\u30D7\u3092\u8868\u793A",
|
|
723
|
+
"hermes.errBusy": "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306F\u751F\u6210\u4E2D\u3067\u3059\u3002\u5B8C\u4E86\u3092\u5F85\u3064\u304B\u3001\u5148\u306B\u505C\u6B62\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
724
|
+
"hermes.errBadWorkspace": "\u3053\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306F\u5B58\u5728\u3057\u306A\u3044\u304B\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093",
|
|
725
|
+
"hermes.logWorkspaceSwitched": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3092\u5207\u66FF: {path}",
|
|
726
|
+
"hermes.errWorkspaceMissing": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u304C\u5B58\u5728\u3057\u307E\u305B\u3093: {dir}",
|
|
727
|
+
"hermes.errStartFailed": "\u8D77\u52D5\u306B\u5931\u6557: {message}",
|
|
728
|
+
"hermes.msgStarted": "Hermes \u30A2\u30C0\u30D7\u30BF\u3092\u8D77\u52D5\u3057\u307E\u3057\u305F\uFF08Ctrl+C \u3067\u7D42\u4E86\uFF09",
|
|
729
|
+
"hermes.logAbortSent": "\u4E2D\u6B62\u3092\u9001\u4FE1 (session={session})",
|
|
730
|
+
"hermes.logPromptFailed": "session.prompt \u306B\u5931\u6557: {message}",
|
|
731
|
+
"hermes.logTurnError": "\u30BF\u30FC\u30F3\u30A8\u30E9\u30FC (session={session}): {message}",
|
|
732
|
+
"hermes.logPairForced": "--pair\uFF1A\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u5F37\u5236\u53D6\u5F97\uFF08\u4ECA\u56DE\u306E\u307F\uFF09",
|
|
733
|
+
"hermes.pairingStillClaimed": "\u30B9\u30DE\u30DB\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u30D0\u30A4\u30F3\u30C9\u6E08\u307F\uFF1A\u3053\u306E\u30B3\u30FC\u30C9\u306F\u540C\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u65B0\u30C7\u30D0\u30A4\u30B9\u518D\u30DA\u30A2\u30EA\u30F3\u30B0\u7528\u3067\u3059\u3002\u73FE\u5728\u306E\u30C7\u30D0\u30A4\u30B9\u306F\u30B9\u30DE\u30DB\u306E\u300C\u30DE\u30A4\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u300D\u304B\u3089\u76F4\u63A5\u63A5\u7D9A\u3067\u304D\u307E\u3059",
|
|
734
|
+
"hermes.logPairNoRelay": "\u30EA\u30EC\u30FCURL\u304C\u672A\u8A2D\u5B9A\u306E\u305F\u3081\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093",
|
|
735
|
+
"hermes.errSpawnHermes": "Hermes\uFF08{bin}\uFF09\u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\uFF1A\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08{err}\uFF09",
|
|
736
|
+
"hermes.errHermesExit": "hermes \u7D42\u4E86({code}): {err}",
|
|
737
|
+
"hermes.logSessionUpdated": "\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u66F4\u65B0 (session={session})",
|
|
738
|
+
"hermes.errNoInject": "\u30B9\u30DE\u30DB\u304B\u3089\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u633F\u5165\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\uFF08\u975E\u5BFE\u8A71\u30BB\u30C3\u30B7\u30E7\u30F3\u307E\u305F\u306F\u30D7\u30ED\u30BB\u30B9\u672A\u6E96\u5099\uFF09",
|
|
739
|
+
"hermes.pairNoRelay": "\u30EA\u30EC\u30FC\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\uFF08\u30EA\u30EC\u30FC\u5230\u9054\u4E0D\u80FD\u307E\u305F\u306F websockets \u6B20\u843D\uFF09",
|
|
740
|
+
"hermes.pairTimeout": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u8981\u6C42\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF08\u30EA\u30EC\u30FC\u672A\u5FDC\u7B54\uFF09",
|
|
741
|
+
"hermes.errToolPair": "tunnelbox_pair \u5931\u6557: {err}",
|
|
742
|
+
"hermes.errToolStatus": "tunnelbox_status \u5931\u6557: {err}",
|
|
743
|
+
"hermes.cliUsage": "\u4F7F\u7528\u65B9\u6CD5: /tunnelbox <pair|status>\n pair \u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\u3057\u3066\u8868\u793A\n status \u30EA\u30EC\u30FC/\u30D0\u30A4\u30F3\u30C9/\u63A5\u7D9A\u72B6\u614B\u3092\u8868\u793A"
|
|
616
744
|
};
|
|
617
745
|
|
|
618
746
|
// ../core/locales/ko-KR.json
|
|
@@ -650,30 +778,28 @@ var ko_KR_default = {
|
|
|
650
778
|
"install.failConnect": "(\uD398\uC5B4\uB9C1 \uC815\uBCF4\uB97C \uCD9C\uB825\uD558\uB824\uACE0 \uB9B4\uB808\uC774\uC5D0 \uC989\uC2DC \uC5F0\uACB0\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4 \u2014 \uB9B4\uB808\uC774\uC5D0 \uC5F0\uACB0\uD560 \uC218 \uC5C6\uAC70\uB098 Node \uBC84\uC804\uC774 \uB108\uBB34 \uC624\uB798\uB410\uC2B5\uB2C8\uB2E4.",
|
|
651
779
|
"install.failConnectHint": "opencode\uB97C \uB2E4\uC2DC \uC2DC\uC791\uD55C \uB4A4 --print-logs\uB85C \uD130\uBBF8\uB110 QR \uCF54\uB4DC\uB97C \uD655\uC778\uD558\uAC70\uB098, opencode \uC548\uC5D0\uC11C \u201C\uD734\uB300\uD3F0 \uD398\uC5B4\uB9C1 \uCF54\uB4DC \uD45C\uC2DC\u201D \uB610\uB294 /pair\uB97C \uC785\uB825\uD558\uC138\uC694.)",
|
|
652
780
|
"install.hintFresh": "\uCC38\uACE0: \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB294 \uC77C\uD68C\uC6A9\uC774\uBA70 \uC57D 10\uBD84\uAC04 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uB098\uC911\uC5D0 opencode\uB97C \uC2DC\uC791\uD55C\uB2E4\uBA74 \uC2DC\uC791 \uC2DC \uCD9C\uB825\uB418\uAC70\uB098 /pair\uB85C \uBC1B\uC740 \uCD5C\uC2E0 \uC815\uBCF4\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.",
|
|
653
|
-
"install.linkLine": "\uD398\uC5B4\uB9C1 \uB9C1\uD06C: {link}",
|
|
654
781
|
"install.pluginInstalled": "\uD50C\uB7EC\uADF8\uC778 \uC124\uCE58\uB428: {path}",
|
|
655
|
-
"install.qrUnavailable": "(QR \uCF54\uB4DC\uB97C \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 \uC704\uC758 \
|
|
782
|
+
"install.qrUnavailable": "(QR \uCF54\uB4DC\uB97C \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 \uC704\uC758 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC0AC\uC6A9\uD558\uC138\uC694)",
|
|
656
783
|
"install.qrcodeEnsure": "qrcode\uB97C opencode \uC124\uC815 \uB514\uB809\uD130\uB9AC\uC5D0 \uC124\uCE58\uD558\uB294 \uC911\u2026",
|
|
657
|
-
"install.qrcodeFail": "qrcode \uC124\uCE58 \uC2E4\uD328(\uC0AC\uC6A9\uC5D0\uB294 \uC601\uD5A5\uC774 \uC5C6\uC73C\uBA70
|
|
784
|
+
"install.qrcodeFail": "qrcode \uC124\uCE58 \uC2E4\uD328(\uC0AC\uC6A9\uC5D0\uB294 \uC601\uD5A5\uC774 \uC5C6\uC73C\uBA70 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB9CC \uD45C\uC2DC\uB429\uB2C8\uB2E4): {err}",
|
|
658
785
|
"install.relayError": "\uB9B4\uB808\uC774 \uC624\uB958 \uC751\uB2F5: {msg}",
|
|
659
|
-
"install.scanHint": "\uD734\uB300\uD3F0\uC5D0\uC11C tunnelbox \uC571 \u201C\uC2A4\uCE94\uD558\uC5EC \uC5F0\uACB0\u201D\uC744 \uC5F4\
|
|
786
|
+
"install.scanHint": "\uD734\uB300\uD3F0\uC5D0\uC11C tunnelbox \uC571 \u201C\uC2A4\uCE94\uD558\uC5EC \uC5F0\uACB0\u201D\uC744 \uC5F4\uACE0 \uC704 QR \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD558\uC5EC \uC5F0\uACB0\uD558\uC138\uC694:",
|
|
660
787
|
"pair.heading": "tunnelbox \uD734\uB300\uD3F0 \uD398\uC5B4\uB9C1",
|
|
661
|
-
"pair.howTo": "\uD734\uB300\uD3F0 \
|
|
788
|
+
"pair.howTo": "\uD734\uB300\uD3F0\uC5D0\uC11C tunnelbox \uC571\uC744 \uC5F4\uACE0 \u201C\uC2A4\uCE94\uD558\uC5EC \uC5F0\uACB0\u201D\uB85C \uC704 QR \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD558\uAC70\uB098 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC9C1\uC811 \uC785\uB825\uD558\uC138\uC694.",
|
|
662
789
|
"pair.oneTime": "\uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB294 \uC77C\uD68C\uC6A9\uC774\uBA70 \uC0AC\uC6A9 \uD6C4\uC5D0\uB294 \uB9CC\uB8CC\uB429\uB2C8\uB2E4. \uC0C8 \uCF54\uB4DC\uAC00 \uD544\uC694\uD558\uBA74 \u201C\uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC0C8\uB85C\uACE0\uCE68\u201D\uC744 \uC694\uCCAD\uD558\uC138\uC694.",
|
|
663
|
-
"pair.promptBody": "\uC774 PC\uC758 \uD734\uB300\uD3F0 \uC6D0\uACA9 \uD398\uC5B4\uB9C1 \uC815\uBCF4\uB97C \uBCF4\uC5EC\uC8FC\uC138\uC694: \uD398\uC5B4\uB9C1 \uCF54\uB4DC
|
|
664
|
-
"pair.promptDescription": "\uD734\uB300\uD3F0 \uC6D0\uACA9 \uD398\uC5B4\uB9C1\uC758 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\xB7\
|
|
665
|
-
"pair.scanIntro": "**\uC2A4\uCE94\uC73C\uB85C \uC5F0\uACB0**: \uD734\uB300\uD3F0\uC5D0\uC11C tunnelbox \uC571 \u201C\uC2A4\uCE94\uD558\uC5EC \uC5F0\uACB0\u201D\uC744 \uC5F4\
|
|
790
|
+
"pair.promptBody": "\uC774 PC\uC758 \uD734\uB300\uD3F0 \uC6D0\uACA9 \uD398\uC5B4\uB9C1 \uC815\uBCF4\uB97C \uBCF4\uC5EC\uC8FC\uC138\uC694: \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uC640 \uC2A4\uCE94\uD560 \uC218 \uC788\uB294 QR \uCF54\uB4DC. QR \uCF54\uB4DC\uB294 \uACE0\uC815\uD3ED \uCF54\uB4DC \uBE14\uB85D\uC5D0 \uB123\uACE0 \uD55C \uAE00\uC790\uB3C4 \uBC14\uAFB8\uC9C0 \uB9D0\uACE0 \uADF8\uB300\uB85C \uD45C\uC2DC\uD574 \uC8FC\uC138\uC694. \uD734\uB300\uD3F0\uC73C\uB85C \uC2A4\uCE94\uD560 \uC218 \uC788\uB3C4\uB85D \uD558\uAE30 \uC704\uD568\uC785\uB2C8\uB2E4.",
|
|
791
|
+
"pair.promptDescription": "\uD734\uB300\uD3F0 \uC6D0\uACA9 \uD398\uC5B4\uB9C1\uC758 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\xB7\uC2A4\uCE94\uC6A9 QR \uCF54\uB4DC \uD45C\uC2DC",
|
|
792
|
+
"pair.scanIntro": "**\uC2A4\uCE94\uC73C\uB85C \uC5F0\uACB0**: \uD734\uB300\uD3F0\uC5D0\uC11C tunnelbox \uC571 \u201C\uC2A4\uCE94\uD558\uC5EC \uC5F0\uACB0\u201D\uC744 \uC5F4\uACE0 \uC544\uB798 QR \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD558\uBA74 \uC790\uB3D9\uC73C\uB85C \uC5F0\uACB0\uB429\uB2C8\uB2E4.",
|
|
666
793
|
"perm.promptAuthorize": "opencode\uAC00 \uAD8C\uD55C\uC744 \uC694\uCCAD\uD569\uB2C8\uB2E4",
|
|
667
794
|
"perm.promptPatterns": "opencode\uAC00 \uC811\uADFC\uC744 \uC694\uCCAD: {list}",
|
|
668
795
|
"perm.promptResource": "opencode\uAC00 \uB9AC\uC18C\uC2A4 \uC811\uADFC\uC744 \uC694\uCCAD: {list}",
|
|
669
796
|
"perm.promptTool": "opencode\uAC00 {tool} \uC2E4\uD589\uC744 \uC694\uCCAD",
|
|
670
797
|
"qr.codeLabel": "\uD398\uC5B4\uB9C1 \uCF54\uB4DC",
|
|
671
798
|
"qr.fileWritten": "\uD398\uC5B4\uB9C1 \uC815\uBCF4\uAC00 \uAE30\uB85D\uB428: {path}",
|
|
672
|
-
"qr.
|
|
673
|
-
"qr.openHint": "\uD734\uB300\uD3F0 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uB9C1\uD06C\uB97C \uC5F4\uAC70\uB098 \uC571\uC5D0\uC11C \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC9C1\uC811 \uC785\uB825\uD558\uC138\uC694.",
|
|
799
|
+
"qr.openHint": "tunnelbox \uC571\uC744 \uC5F4\uACE0 \uC704 QR \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD558\uAC70\uB098, \uC571\uC5D0\uC11C \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC9C1\uC811 \uC785\uB825\uD558\uC138\uC694.",
|
|
674
800
|
"qr.titleNoType": "tunnelbox \uD734\uB300\uD3F0 \uD398\uC5B4\uB9C1",
|
|
675
801
|
"qr.titleWithType": "tunnelbox {type} \uD734\uB300\uD3F0 \uD398\uC5B4\uB9C1",
|
|
676
|
-
"qr.unavailable": "(qrcode\uAC00 \uC124\uCE58\uB418\uC9C0 \uC54A\uC74C \u2014 \uC704\uC758 \
|
|
802
|
+
"qr.unavailable": "(qrcode\uAC00 \uC124\uCE58\uB418\uC9C0 \uC54A\uC74C \u2014 \uC704\uC758 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC0AC\uC6A9\uD558\uC138\uC694)",
|
|
677
803
|
"claude.errBusy": "\uC774 \uC138\uC158\uC774 \uC2E4\uD589 \uC911\uC785\uB2C8\uB2E4. \uC644\uB8CC\uB420 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB9AC\uAC70\uB098 \uBA3C\uC800 \uC911\uC9C0\uD558\uC138\uC694",
|
|
678
804
|
"claude.errTurn": "\uC0DD\uC131 \uC624\uB958",
|
|
679
805
|
"claude.pairingStillClaimed": "\uC774\uBBF8 \uACC4\uC815\uC5D0 \uC5F0\uACB0\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uCF54\uB4DC\uB294 \uAC19\uC740 \uACC4\uC815\uC758 \uC0C8 \uAE30\uAE30 \uC5F0\uACB0 \uC804\uC6A9\uC774\uBA70, \uD604\uC7AC \uAE30\uAE30\uB294 '\uB0B4 \uCEF4\uD4E8\uD130'\uC5D0\uC11C \uC9C1\uC811 \uC5F0\uACB0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4",
|
|
@@ -741,7 +867,41 @@ var ko_KR_default = {
|
|
|
741
867
|
"claude.errReadHistory": "\uC138\uC158 \uAE30\uB85D\uC744 \uC77D\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4({id})",
|
|
742
868
|
"setup.langSet": "\uC2E4\uD589 \uC5B8\uC5B4\uB97C \uC124\uC815\uD588\uC2B5\uB2C8\uB2E4",
|
|
743
869
|
"setup.langHint": "\uB2E4\uC2DC \uC2DC\uC791\uD558\uBA74 \uC774 \uC5B8\uC5B4\uB85C \uCD9C\uB825\uB429\uB2C8\uB2E4(\uC2E4\uD589 \uC2DC TUNNELBOX_LANG\uC73C\uB85C \uC7AC\uC815\uC758 \uAC00\uB2A5). \uC0C1\uD0DC \uD30C\uC77C:",
|
|
744
|
-
"setup.langCurrent": "\uD604\uC7AC \uC2E4\uD589 \uC5B8\uC5B4"
|
|
870
|
+
"setup.langCurrent": "\uD604\uC7AC \uC2E4\uD589 \uC5B8\uC5B4",
|
|
871
|
+
"hermes.errNoRelay": "\uB9B4\uB808\uC774 URL\uC774 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4: --env\uB85C \uAE30\uBCF8\uAC12\uC744 \uC8FC\uC785\uD558\uAC70\uB098 \uC2E4\uD589 \uC2DC TUNNELBOX_RELAY_URL\uB85C \uC7AC\uC815\uC758\uD558\uC138\uC694",
|
|
872
|
+
"hermes.logConnected": "\uB9B4\uB808\uC774\uC5D0 \uC5F0\uACB0\uB428 {url}",
|
|
873
|
+
"hermes.logMsgUncaught": "\uBA54\uC2DC\uC9C0 \uCC98\uB9AC \uC911 \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC740 \uC608\uC678: {message}",
|
|
874
|
+
"hermes.logDisconnected": "\uB9B4\uB808\uC774\uC640 \uC5F0\uACB0 \uB04A\uAE40, \uC790\uB3D9 \uC7AC\uC5F0\uACB0 \uC911\u2026",
|
|
875
|
+
"hermes.logPairCode": "\uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC0DD\uC131: {code}",
|
|
876
|
+
"hermes.logUnhandledType": "\uCC98\uB9AC\uB418\uC9C0 \uC54A\uC740 \uBA54\uC2DC\uC9C0 \uC720\uD615: {type}",
|
|
877
|
+
"hermes.logHandleFailed": "{type} \uCC98\uB9AC \uC2E4\uD328: {message}",
|
|
878
|
+
"hermes.logClaimed": "\uD734\uB300\uD3F0 \uACC4\uC815\uC5D0 \uBC14\uC778\uB529\uB428. \uC774\uC81C \uD734\uB300\uD3F0\uC758 '\uB0B4 \uCEF4\uD4E8\uD130'\uC5D0\uC11C \uC9C1\uC811 \uC5F0\uACB0\uD569\uB2C8\uB2E4",
|
|
879
|
+
"hermes.logResetIdentity": "\uACC4\uC815\uC5D0\uC11C \uBC14\uC778\uB529 \uD574\uC81C\uB428, ID \uC7AC\uC124\uC815 \uBC0F \uC0C8 \uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC0DD\uC131 \uC911\u2026",
|
|
880
|
+
"hermes.cmdNew": "\uC0C8 \uC138\uC158",
|
|
881
|
+
"hermes.cmdHelp": "\uB3C4\uC6C0\uB9D0 \uD45C\uC2DC",
|
|
882
|
+
"hermes.newSessionTitle": "\uC0C8 \uC138\uC158",
|
|
883
|
+
"hermes.helpText": "\uC9C0\uC6D0 \uBA85\uB839:\n- /new \uC0C8 \uC138\uC158\n- /help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC",
|
|
884
|
+
"hermes.errBusy": "\uC774 \uC138\uC158\uC774 \uC0DD\uC131 \uC911\uC785\uB2C8\uB2E4. \uC644\uB8CC\uB97C \uAE30\uB2E4\uB9AC\uAC70\uB098 \uBA3C\uC800 \uC911\uC9C0\uD558\uC138\uC694",
|
|
885
|
+
"hermes.errBadWorkspace": "\uC774 \uB514\uB809\uD1A0\uB9AC\uB294 \uC874\uC7AC\uD558\uC9C0 \uC54A\uAC70\uB098 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
|
|
886
|
+
"hermes.logWorkspaceSwitched": "\uC791\uC5C5\uACF5\uAC04 \uC804\uD658: {path}",
|
|
887
|
+
"hermes.errWorkspaceMissing": "\uC791\uC5C5\uACF5\uAC04\uC774 \uC5C6\uC2B5\uB2C8\uB2E4: {dir}",
|
|
888
|
+
"hermes.errStartFailed": "\uC2DC\uC791 \uC2E4\uD328: {message}",
|
|
889
|
+
"hermes.msgStarted": "Hermes \uC5B4\uB311\uD130 \uC2DC\uC791\uB428 (Ctrl+C\uB85C \uC885\uB8CC)",
|
|
890
|
+
"hermes.logAbortSent": "\uC911\uC9C0 \uC804\uC1A1\uB428 (session={session})",
|
|
891
|
+
"hermes.logPromptFailed": "session.prompt \uC2E4\uD328: {message}",
|
|
892
|
+
"hermes.logTurnError": "\uD134 \uC624\uB958 (session={session}): {message}",
|
|
893
|
+
"hermes.logPairForced": "--pair: \uD398\uC5B4\uB9C1 \uCF54\uB4DC \uAC15\uC81C \uC694\uCCAD (\uC774\uBC88\uC5D0\uB9CC)",
|
|
894
|
+
"hermes.pairingStillClaimed": "\uD734\uB300\uD3F0 \uACC4\uC815\uC5D0 \uC774\uBBF8 \uBC14\uC778\uB529\uB428: \uC774 \uCF54\uB4DC\uB294 \uAC19\uC740 \uACC4\uC815\uC758 \uC0C8 \uAE30\uAE30 \uC7AC\uD398\uC5B4\uB9C1\uC6A9\uC785\uB2C8\uB2E4. \uD604\uC7AC \uAE30\uAE30\uB294 \uD734\uB300\uD3F0\uC758 '\uB0B4 \uCEF4\uD4E8\uD130'\uC5D0\uC11C \uC9C1\uC811 \uC5F0\uACB0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4",
|
|
895
|
+
"hermes.logPairNoRelay": "\uB9B4\uB808\uC774 URL\uC774 \uC124\uC815\uB418\uC9C0 \uC54A\uC544 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC694\uCCAD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
|
|
896
|
+
"hermes.errSpawnHermes": "Hermes({bin})\uB97C \uC2DC\uC791\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: \uC124\uCE58 \uC5EC\uBD80\uB97C \uD655\uC778\uD558\uC138\uC694 ({err})",
|
|
897
|
+
"hermes.errHermesExit": "hermes \uC885\uB8CC({code}): {err}",
|
|
898
|
+
"hermes.logSessionUpdated": "\uC138\uC158 \uC5C5\uB370\uC774\uD2B8\uB428 (session={session})",
|
|
899
|
+
"hermes.errNoInject": "\uD734\uB300\uD3F0 \uBA54\uC2DC\uC9C0 \uC8FC\uC785\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4(\uBE44\uB300\uD654\uD615 \uC138\uC158 \uB610\uB294 \uD504\uB85C\uC138\uC2A4 \uBBF8\uC900\uBE44)",
|
|
900
|
+
"hermes.pairNoRelay": "\uB9B4\uB808\uC774\uC5D0 \uC5F0\uACB0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4(\uB9B4\uB808\uC774 \uB3C4\uB2EC \uBD88\uAC00 \uB610\uB294 websockets \uB204\uB77D)",
|
|
901
|
+
"hermes.pairTimeout": "\uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC694\uCCAD \uC2DC\uAC04 \uCD08\uACFC(\uB9B4\uB808\uC774 \uBBF8\uC751\uB2F5)",
|
|
902
|
+
"hermes.errToolPair": "tunnelbox_pair \uC2E4\uD328: {err}",
|
|
903
|
+
"hermes.errToolStatus": "tunnelbox_status \uC2E4\uD328: {err}",
|
|
904
|
+
"hermes.cliUsage": "\uC0AC\uC6A9\uBC95: /tunnelbox <pair|status>\n pair \uD734\uB300\uD3F0 \uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC694\uCCAD/\uCD9C\uB825\n status \uB9B4\uB808\uC774/\uBC14\uC778\uB529/\uC5F0\uACB0 \uC0C1\uD0DC \uD45C\uC2DC"
|
|
745
905
|
};
|
|
746
906
|
|
|
747
907
|
// ../core/locales/fr-FR.json
|
|
@@ -779,30 +939,28 @@ var fr_FR_default = {
|
|
|
779
939
|
"install.failConnect": "(Impossible de se connecter au relais pour afficher l'appairage \u2014 relais injoignable ou version de Node trop ancienne.",
|
|
780
940
|
"install.failConnectHint": "Apr\xE8s le red\xE9marrage d'opencode, consultez le QR code du terminal avec --print-logs, ou tapez \u201Cafficher le code d'appairage\u201D / /pair dans opencode.)",
|
|
781
941
|
"install.hintFresh": "Remarque : le code d'appairage est \xE0 usage unique et valide environ 10 minutes. Si vous d\xE9marrez opencode plus tard, utilisez les informations imprim\xE9es au d\xE9marrage ou obtenues via /pair.",
|
|
782
|
-
"install.linkLine": "Lien d'appairage : {link}",
|
|
783
942
|
"install.pluginInstalled": "Plugin install\xE9 : {path}",
|
|
784
|
-
"install.qrUnavailable": "(Rendu du QR indisponible \u2014 utilisez le
|
|
943
|
+
"install.qrUnavailable": "(Rendu du QR indisponible \u2014 utilisez le code ci-dessus)",
|
|
785
944
|
"install.qrcodeEnsure": "Installation de qrcode dans le r\xE9pertoire de configuration d'opencode\u2026",
|
|
786
|
-
"install.qrcodeFail": "\xC9chec de l'installation de qrcode (sans cons\xE9quence \u2014 le
|
|
945
|
+
"install.qrcodeFail": "\xC9chec de l'installation de qrcode (sans cons\xE9quence \u2014 seul le code d'appairage est affich\xE9) : {err}",
|
|
787
946
|
"install.relayError": "Le relais a renvoy\xE9 une erreur : {msg}",
|
|
788
|
-
"install.scanHint": "Ouvrez tunnelbox sur votre t\xE9l\xE9phone, touchez \u201CScanner pour appairer\u201D,
|
|
947
|
+
"install.scanHint": "Ouvrez tunnelbox sur votre t\xE9l\xE9phone, touchez \u201CScanner pour appairer\u201D, puis scannez le QR ci-dessus pour connecter :",
|
|
789
948
|
"pair.heading": "Appairage t\xE9l\xE9phone tunnelbox",
|
|
790
|
-
"pair.howTo": "Ouvrez
|
|
949
|
+
"pair.howTo": "Ouvrez l'application tunnelbox sur votre t\xE9l\xE9phone, scannez le QR ci-dessus avec \u201CScanner pour appairer\u201D, ou saisissez le code d'appairage manuellement.",
|
|
791
950
|
"pair.oneTime": "Le code d'appairage est \xE0 usage unique et expire apr\xE8s utilisation ; demandez \xE0 \u201Craffra\xEEchir le code d'appairage\u201D pour en obtenir un nouveau.",
|
|
792
|
-
"pair.promptBody": "Veuillez afficher les informations d'appairage t\xE9l\xE9phone de cet ordinateur : le code d'appairage
|
|
793
|
-
"pair.promptDescription": "Afficher le code d'appairage
|
|
794
|
-
"pair.scanIntro": "**Appairer par scan** : ouvrez l'application tunnelbox sur votre t\xE9l\xE9phone
|
|
951
|
+
"pair.promptBody": "Veuillez afficher les informations d'appairage t\xE9l\xE9phone de cet ordinateur : le code d'appairage et un QR code scannable. Gardez le QR code dans un bloc de code \xE0 largeur fixe et reproduisez-le caract\xE8re par caract\xE8re pour que mon t\xE9l\xE9phone puisse le scanner.",
|
|
952
|
+
"pair.promptDescription": "Afficher le code d'appairage et le QR code scannable",
|
|
953
|
+
"pair.scanIntro": "**Appairer par scan** : ouvrez l'application tunnelbox sur votre t\xE9l\xE9phone, touchez \u201CScanner pour appairer\u201D, puis scannez le QR ci-dessous pour vous connecter automatiquement.",
|
|
795
954
|
"perm.promptAuthorize": "opencode demande une autorisation",
|
|
796
955
|
"perm.promptPatterns": "opencode demande l'acc\xE8s \xE0 : {list}",
|
|
797
956
|
"perm.promptResource": "opencode demande l'acc\xE8s aux ressources : {list}",
|
|
798
957
|
"perm.promptTool": "opencode demande d'ex\xE9cuter {tool}",
|
|
799
958
|
"qr.codeLabel": "Code d'appairage",
|
|
800
959
|
"qr.fileWritten": "Informations d'appairage \xE9crites dans : {path}",
|
|
801
|
-
"qr.
|
|
802
|
-
"qr.openHint": "Ouvrez le lien dans le navigateur du t\xE9l\xE9phone, ou saisissez le code d'appairage dans l'application.",
|
|
960
|
+
"qr.openHint": "Ouvrez l'application tunnelbox sur votre t\xE9l\xE9phone et scannez le QR ci-dessus, ou saisissez le code d'appairage manuellement dans l'application.",
|
|
803
961
|
"qr.titleNoType": "appairage t\xE9l\xE9phone tunnelbox",
|
|
804
962
|
"qr.titleWithType": "appairage t\xE9l\xE9phone tunnelbox {type}",
|
|
805
|
-
"qr.unavailable": "(qrcode non install\xE9 \u2014 utilisez le
|
|
963
|
+
"qr.unavailable": "(qrcode non install\xE9 \u2014 utilisez le code d'appairage ci-dessus)",
|
|
806
964
|
"claude.errBusy": "Cette session est en cours d'ex\xE9cution ; attendez la fin ou arr\xEAtez-la d'abord",
|
|
807
965
|
"claude.errTurn": "erreur de g\xE9n\xE9ration",
|
|
808
966
|
"claude.pairingStillClaimed": "D\xE9j\xE0 li\xE9 \xE0 un compte t\xE9l\xE9phone : ce code sert uniquement \xE0 appairer un nouvel appareil sur le m\xEAme compte ; l'appareil actuel se connecte directement depuis Mes ordinateurs",
|
|
@@ -870,7 +1028,41 @@ var fr_FR_default = {
|
|
|
870
1028
|
"claude.errReadHistory": "\xC9chec de la lecture de l'historique de session ({id})",
|
|
871
1029
|
"setup.langSet": "Langue d'ex\xE9cution d\xE9finie sur",
|
|
872
1030
|
"setup.langHint": "L'adaptateur utilisera cette langue au prochain d\xE9marrage (TUNNELBOX_LANG peut la remplacer). Fichier d'\xE9tat :",
|
|
873
|
-
"setup.langCurrent": "Langue d'ex\xE9cution actuelle"
|
|
1031
|
+
"setup.langCurrent": "Langue d'ex\xE9cution actuelle",
|
|
1032
|
+
"hermes.errNoRelay": "URL du relais non configur\xE9e : utilisez --env pour injecter une valeur par d\xE9faut, ou remplacez \xE0 l'ex\xE9cution avec TUNNELBOX_RELAY_URL",
|
|
1033
|
+
"hermes.logConnected": "Connect\xE9 au relais {url}",
|
|
1034
|
+
"hermes.logMsgUncaught": "Exception non intercept\xE9e lors du traitement du message : {message}",
|
|
1035
|
+
"hermes.logDisconnected": "D\xE9connect\xE9 du relais, reconnexion automatique\u2026",
|
|
1036
|
+
"hermes.logPairCode": "Code d'appairage g\xE9n\xE9r\xE9 : {code}",
|
|
1037
|
+
"hermes.logUnhandledType": "Type de message non trait\xE9 : {type}",
|
|
1038
|
+
"hermes.logHandleFailed": "\xC9chec du traitement de {type} : {message}",
|
|
1039
|
+
"hermes.logClaimed": "Li\xE9 \xE0 votre compte t\xE9l\xE9phone. Le t\xE9l\xE9phone se connecte d\xE9sormais directement depuis Mes ordinateurs",
|
|
1040
|
+
"hermes.logResetIdentity": "Dissoci\xE9 du compte ; r\xE9initialisation de l'identit\xE9 et g\xE9n\xE9ration d'un nouveau code d'appairage\u2026",
|
|
1041
|
+
"hermes.cmdNew": "Nouvelle session",
|
|
1042
|
+
"hermes.cmdHelp": "Afficher l'aide",
|
|
1043
|
+
"hermes.newSessionTitle": "Nouvelle session",
|
|
1044
|
+
"hermes.helpText": "Commandes prises en charge :\n- /new nouvelle session\n- /help afficher l'aide",
|
|
1045
|
+
"hermes.errBusy": "Cette session est en cours de g\xE9n\xE9ration ; attendez la fin ou arr\xEAtez-la d'abord",
|
|
1046
|
+
"hermes.errBadWorkspace": "Ce r\xE9pertoire n'existe pas ou est inutilisable",
|
|
1047
|
+
"hermes.logWorkspaceSwitched": "Espace de travail chang\xE9 : {path}",
|
|
1048
|
+
"hermes.errWorkspaceMissing": "L'espace de travail n'existe pas : {dir}",
|
|
1049
|
+
"hermes.errStartFailed": "\xC9chec du d\xE9marrage : {message}",
|
|
1050
|
+
"hermes.msgStarted": "Adaptateur Hermes d\xE9marr\xE9 (Ctrl+C pour quitter)",
|
|
1051
|
+
"hermes.logAbortSent": "Interruption envoy\xE9e (session={session})",
|
|
1052
|
+
"hermes.logPromptFailed": "session.prompt a \xE9chou\xE9 : {message}",
|
|
1053
|
+
"hermes.logTurnError": "Erreur de tour (session={session}) : {message}",
|
|
1054
|
+
"hermes.logPairForced": "--pair : demande forc\xE9e du code d'appairage (cet ex\xE9cution uniquement)",
|
|
1055
|
+
"hermes.pairingStillClaimed": "D\xE9j\xE0 li\xE9 \xE0 un compte t\xE9l\xE9phone : ce code ne sert qu'\xE0 r\xE9appairer un nouvel appareil sur le m\xEAme compte ; l'appareil actuel se connecte directement depuis Mes ordinateurs",
|
|
1056
|
+
"hermes.logPairNoRelay": "Impossible de demander un code d'appairage : URL du relais non configur\xE9e",
|
|
1057
|
+
"hermes.errSpawnHermes": "Impossible de d\xE9marrer Hermes ({bin}) : v\xE9rifiez qu'il est install\xE9 ({err})",
|
|
1058
|
+
"hermes.errHermesExit": "hermes a quitt\xE9 ({code}) : {err}",
|
|
1059
|
+
"hermes.logSessionUpdated": "Session mise \xE0 jour (session={session})",
|
|
1060
|
+
"hermes.errNoInject": "Injection du message t\xE9l\xE9phone indisponible (session non interactive ou processus non pr\xEAt)",
|
|
1061
|
+
"hermes.pairNoRelay": "Impossible de joindre le relais (relais injoignable ou websockets manquant)",
|
|
1062
|
+
"hermes.pairTimeout": "D\xE9lai d\xE9pass\xE9 pour le code d'appairage (relais sans r\xE9ponse)",
|
|
1063
|
+
"hermes.errToolPair": "\xE9chec de tunnelbox_pair : {err}",
|
|
1064
|
+
"hermes.errToolStatus": "\xE9chec de tunnelbox_status : {err}",
|
|
1065
|
+
"hermes.cliUsage": "Utilisation : /tunnelbox <pair|status>\n pair demander et afficher un code d'appairage\n status afficher l'\xE9tat relais/liaison/connexion"
|
|
874
1066
|
};
|
|
875
1067
|
|
|
876
1068
|
// ../core/locales/de-DE.json
|
|
@@ -908,30 +1100,28 @@ var de_DE_default = {
|
|
|
908
1100
|
"install.failConnect": "(Keine sofortige Verbindung zum Relay zum Drucken der Pairing-Informationen m\xF6glich \u2014 Relay nicht erreichbar oder Node zu alt.",
|
|
909
1101
|
"install.failConnectHint": "Nach dem Neustart von opencode den Terminal-QR-Code mit --print-logs anzeigen oder im opencode \u201CTelefon-Pairing-Code anzeigen\u201D bzw. /pair eingeben.)",
|
|
910
1102
|
"install.hintFresh": "Hinweis: Der Pairing-Code ist einmalig und etwa 10 Minuten g\xFCltig. Wenn Sie opencode sp\xE4ter starten, nutzen Sie die beim Start gedruckten oder per /pair abgerufenen aktuellen Informationen.",
|
|
911
|
-
"install.linkLine": "Pairing-Link: {link}",
|
|
912
1103
|
"install.pluginInstalled": "Plugin installiert: {path}",
|
|
913
|
-
"install.qrUnavailable": "(QR-Darstellung nicht verf\xFCgbar \u2014 nutzen Sie den
|
|
1104
|
+
"install.qrUnavailable": "(QR-Darstellung nicht verf\xFCgbar \u2014 nutzen Sie den Code oben)",
|
|
914
1105
|
"install.qrcodeEnsure": "Installiere qrcode in das opencode-Konfigurationsverzeichnis\u2026",
|
|
915
|
-
"install.qrcodeFail": "qrcode-Installation fehlgeschlagen (nicht kritisch \u2014
|
|
1106
|
+
"install.qrcodeFail": "qrcode-Installation fehlgeschlagen (nicht kritisch \u2014 nur der Pairing-Code wird angezeigt): {err}",
|
|
916
1107
|
"install.relayError": "Relay hat einen Fehler zur\xFCckgegeben: {msg}",
|
|
917
|
-
"install.scanHint": "\xD6ffnen Sie tunnelbox auf dem Telefon, tippen Sie auf \u201CZum Pairing scannen\u201D
|
|
1108
|
+
"install.scanHint": "\xD6ffnen Sie tunnelbox auf dem Telefon, tippen Sie auf \u201CZum Pairing scannen\u201D und scannen Sie den QR-Code oben zum Verbinden:",
|
|
918
1109
|
"pair.heading": "tunnelbox Telefon-Pairing",
|
|
919
|
-
"pair.howTo": "\xD6ffnen Sie
|
|
1110
|
+
"pair.howTo": "\xD6ffnen Sie die tunnelbox-App auf dem Telefon und scannen Sie den QR-Code oben mit \u201CZum Pairing scannen\u201D, oder geben Sie den Pairing-Code manuell ein.",
|
|
920
1111
|
"pair.oneTime": "Der Pairing-Code ist einmalig und verf\xE4llt nach der Nutzung; f\xFCr einen neuen Code \u201CPairing-Code aktualisieren\u201D anfordern.",
|
|
921
|
-
"pair.promptBody": "Zeigen Sie bitte die Telefon-Pairing-Informationen dieses Computers an: den Pairing-Code
|
|
922
|
-
"pair.promptDescription": "Pairing-Code
|
|
923
|
-
"pair.scanIntro": "**Per Scan pairen**: \xD6ffnen Sie die tunnelbox-App auf dem Telefon
|
|
1112
|
+
"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.",
|
|
1113
|
+
"pair.promptDescription": "Pairing-Code und scannbaren QR-Code anzeigen",
|
|
1114
|
+
"pair.scanIntro": "**Per Scan pairen**: \xD6ffnen Sie die tunnelbox-App auf dem Telefon, tippen Sie auf \u201CZum Pairing scannen\u201D und scannen Sie den QR-Code unten, um sich automatisch zu verbinden.",
|
|
924
1115
|
"perm.promptAuthorize": "opencode fordert eine Genehmigung an",
|
|
925
1116
|
"perm.promptPatterns": "opencode fordert Zugriff auf: {list}",
|
|
926
1117
|
"perm.promptResource": "opencode fordert Zugriff auf Ressourcen: {list}",
|
|
927
1118
|
"perm.promptTool": "opencode fordert die Ausf\xFChrung von {tool} an",
|
|
928
1119
|
"qr.codeLabel": "Pairing-Code",
|
|
929
1120
|
"qr.fileWritten": "Pairing-Informationen geschrieben in: {path}",
|
|
930
|
-
"qr.
|
|
931
|
-
"qr.openHint": "\xD6ffnen Sie den Link im Telefon-Browser oder geben Sie den Pairing-Code manuell in der App ein.",
|
|
1121
|
+
"qr.openHint": "\xD6ffnen 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.",
|
|
932
1122
|
"qr.titleNoType": "tunnelbox Telefon-Pairing",
|
|
933
1123
|
"qr.titleWithType": "tunnelbox {type} Telefon-Pairing",
|
|
934
|
-
"qr.unavailable": "(qrcode nicht installiert \u2014 nutzen Sie den
|
|
1124
|
+
"qr.unavailable": "(qrcode nicht installiert \u2014 nutzen Sie den Pairing-Code oben)",
|
|
935
1125
|
"claude.errBusy": "Diese Sitzung l\xE4uft noch; warten Sie auf das Ende oder stoppen Sie sie zuerst",
|
|
936
1126
|
"claude.errTurn": "Generierungsfehler",
|
|
937
1127
|
"claude.pairingStillClaimed": "Bereits an ein Telefonkonto gebunden: Dieser Code dient nur zum Koppeln eines neuen Ger\xE4ts auf demselben Konto; das aktuelle Ger\xE4t verbindet sich direkt \xFCber \u201EMeine Computer\u201C",
|
|
@@ -999,7 +1189,41 @@ var de_DE_default = {
|
|
|
999
1189
|
"claude.errReadHistory": "Sitzungsverlauf konnte nicht gelesen werden ({id})",
|
|
1000
1190
|
"setup.langSet": "Laufzeitsprache gesetzt auf",
|
|
1001
1191
|
"setup.langHint": "Der Adapter gibt nach dem Neustart in dieser Sprache aus (TUNNELBOX_LANG kann zur Laufzeit \xFCberschreiben). Statusdatei:",
|
|
1002
|
-
"setup.langCurrent": "Aktuelle Laufzeitsprache"
|
|
1192
|
+
"setup.langCurrent": "Aktuelle Laufzeitsprache",
|
|
1193
|
+
"hermes.errNoRelay": "Keine Relay-URL konfiguriert: mit --env einen Standardwert einf\xFCgen oder zur Laufzeit mit TUNNELBOX_RELAY_URL \xFCberschreiben",
|
|
1194
|
+
"hermes.logConnected": "Mit Relay verbunden {url}",
|
|
1195
|
+
"hermes.logMsgUncaught": "Nicht abgefangene Ausnahme bei der Nachrichtenverarbeitung: {message}",
|
|
1196
|
+
"hermes.logDisconnected": "Vom Relay getrennt, automatische Neuverbindung\u2026",
|
|
1197
|
+
"hermes.logPairCode": "Pairing-Code generiert: {code}",
|
|
1198
|
+
"hermes.logUnhandledType": "Nicht behandelter Nachrichtentyp: {type}",
|
|
1199
|
+
"hermes.logHandleFailed": "Fehler beim Verarbeiten von {type}: {message}",
|
|
1200
|
+
"hermes.logClaimed": "An Ihr Telefonkonto gebunden. Das Telefon verbindet sich k\xFCnftig direkt \xFCber Meine Computer",
|
|
1201
|
+
"hermes.logResetIdentity": "Vom Konto entbunden; Identit\xE4t wird zur\xFCckgesetzt und ein neuer Pairing-Code generiert\u2026",
|
|
1202
|
+
"hermes.cmdNew": "Neue Sitzung",
|
|
1203
|
+
"hermes.cmdHelp": "Hilfe anzeigen",
|
|
1204
|
+
"hermes.newSessionTitle": "Neue Sitzung",
|
|
1205
|
+
"hermes.helpText": "Unterst\xFCtzte Befehle:\n- /new neue Sitzung\n- /help Hilfe anzeigen",
|
|
1206
|
+
"hermes.errBusy": "Diese Sitzung wird gerade generiert; warten Sie auf den Abschluss oder stoppen Sie sie zuerst",
|
|
1207
|
+
"hermes.errBadWorkspace": "Dieses Verzeichnis existiert nicht oder ist unbrauchbar",
|
|
1208
|
+
"hermes.logWorkspaceSwitched": "Arbeitsbereich gewechselt: {path}",
|
|
1209
|
+
"hermes.errWorkspaceMissing": "Arbeitsbereich existiert nicht: {dir}",
|
|
1210
|
+
"hermes.errStartFailed": "Start fehlgeschlagen: {message}",
|
|
1211
|
+
"hermes.msgStarted": "Hermes-Adapter gestartet (Strg+C zum Beenden)",
|
|
1212
|
+
"hermes.logAbortSent": "Abbruch gesendet (session={session})",
|
|
1213
|
+
"hermes.logPromptFailed": "session.prompt fehlgeschlagen: {message}",
|
|
1214
|
+
"hermes.logTurnError": "Fehler bei Runde (session={session}): {message}",
|
|
1215
|
+
"hermes.logPairForced": "--pair: Pairing-Code erzwungen (nur dieser Lauf)",
|
|
1216
|
+
"hermes.pairingStillClaimed": "Bereits an ein Telefonkonto gebunden: Dieser Code dient nur zum erneuten Pairing eines neuen Ger\xE4ts desselben Kontos; das aktuelle Ger\xE4t verbindet sich direkt \xFCber Meine Computer",
|
|
1217
|
+
"hermes.logPairNoRelay": "Kein Pairing-Code anforderbar: keine Relay-URL konfiguriert",
|
|
1218
|
+
"hermes.errSpawnHermes": "Hermes ({bin}) kann nicht gestartet werden: bitte Installation pr\xFCfen ({err})",
|
|
1219
|
+
"hermes.errHermesExit": "hermes beendet ({code}): {err}",
|
|
1220
|
+
"hermes.logSessionUpdated": "Sitzung aktualisiert (session={session})",
|
|
1221
|
+
"hermes.errNoInject": "Telefon-Nachrichteneinspeisung nicht verf\xFCgbar (Sitzung nicht interaktiv oder Prozess nicht bereit)",
|
|
1222
|
+
"hermes.pairNoRelay": "Relay nicht erreichbar (Relay nicht erreichbar oder websockets fehlt)",
|
|
1223
|
+
"hermes.pairTimeout": "Zeit\xFCberschreitung bei der Pairing-Code-Anfrage (Relay antwortete nicht)",
|
|
1224
|
+
"hermes.errToolPair": "tunnelbox_pair fehlgeschlagen: {err}",
|
|
1225
|
+
"hermes.errToolStatus": "tunnelbox_status fehlgeschlagen: {err}",
|
|
1226
|
+
"hermes.cliUsage": "Verwendung: /tunnelbox <pair|status>\n pair Pairing-Code anfordern und anzeigen\n status Relay/Bindung/Verbindung anzeigen"
|
|
1003
1227
|
};
|
|
1004
1228
|
|
|
1005
1229
|
// ../core/locales/es-ES.json
|
|
@@ -1037,30 +1261,28 @@ var es_ES_default = {
|
|
|
1037
1261
|
"install.failConnect": "(No se pudo conectar de inmediato con el relay para imprimir el emparejamiento \u2014 relay inaccesible o versi\xF3n de Node demasiado antigua.",
|
|
1038
1262
|
"install.failConnectHint": "Tras reiniciar opencode, consulte el c\xF3digo QR del terminal con --print-logs, o escriba \u201Cmostrar c\xF3digo de emparejamiento del tel\xE9fono\u201D o /pair en opencode.)",
|
|
1039
1263
|
"install.hintFresh": "Nota: el c\xF3digo de emparejamiento es de un solo uso y v\xE1lido durante unos 10 minutos. Si inicia opencode m\xE1s tarde, use la informaci\xF3n m\xE1s reciente impresa al iniciar u obtenida con /pair.",
|
|
1040
|
-
"install.linkLine": "Enlace de emparejamiento: {link}",
|
|
1041
1264
|
"install.pluginInstalled": "Complemento instalado: {path}",
|
|
1042
|
-
"install.qrUnavailable": "(Representaci\xF3n del QR no disponible: use el
|
|
1265
|
+
"install.qrUnavailable": "(Representaci\xF3n del QR no disponible: use el c\xF3digo anterior)",
|
|
1043
1266
|
"install.qrcodeEnsure": "Instalando qrcode en el directorio de configuraci\xF3n de opencode\u2026",
|
|
1044
|
-
"install.qrcodeFail": "Error al instalar qrcode (no es cr\xEDtico;
|
|
1267
|
+
"install.qrcodeFail": "Error al instalar qrcode (no es cr\xEDtico; solo se muestra el c\xF3digo de emparejamiento): {err}",
|
|
1045
1268
|
"install.relayError": "El relay devolvi\xF3 un error: {msg}",
|
|
1046
|
-
"install.scanHint": "Abra tunnelbox en el tel\xE9fono, pulse \u201CEscanear para emparejar\u201D
|
|
1269
|
+
"install.scanHint": "Abra tunnelbox en el tel\xE9fono, pulse \u201CEscanear para emparejar\u201D y escanee el c\xF3digo QR superior para conectar:",
|
|
1047
1270
|
"pair.heading": "Emparejamiento de tel\xE9fono tunnelbox",
|
|
1048
|
-
"pair.howTo": "Abra
|
|
1271
|
+
"pair.howTo": "Abra la aplicaci\xF3n tunnelbox en el tel\xE9fono y escanee el c\xF3digo QR superior con \u201CEscanear para emparejar\u201D, o introduzca el c\xF3digo de emparejamiento manualmente.",
|
|
1049
1272
|
"pair.oneTime": "El c\xF3digo de emparejamiento es de un solo uso y caduca al utilizarse; pida \u201Cactualizar el c\xF3digo de emparejamiento\u201D para obtener uno nuevo.",
|
|
1050
|
-
"pair.promptBody": "Mu\xE9strame la informaci\xF3n de emparejamiento con el tel\xE9fono de este ordenador: el c\xF3digo de emparejamiento
|
|
1051
|
-
"pair.promptDescription": "Mostrar el c\xF3digo de emparejamiento
|
|
1052
|
-
"pair.scanIntro": "**Emparejar escaneando**: abra la aplicaci\xF3n tunnelbox en el tel\xE9fono
|
|
1273
|
+
"pair.promptBody": "Mu\xE9strame la informaci\xF3n de emparejamiento con el tel\xE9fono de este ordenador: el c\xF3digo de emparejamiento y un c\xF3digo QR escaneable. Mant\xE9n el c\xF3digo QR dentro de un bloque de c\xF3digo de ancho fijo y reprod\xFAcelo car\xE1cter por car\xE1cter para que mi tel\xE9fono pueda escanearlo.",
|
|
1274
|
+
"pair.promptDescription": "Mostrar el c\xF3digo de emparejamiento y el QR escaneable",
|
|
1275
|
+
"pair.scanIntro": "**Emparejar escaneando**: abra la aplicaci\xF3n tunnelbox en el tel\xE9fono, pulse \u201CEscanear para emparejar\u201D y escanee el c\xF3digo QR inferior para conectar autom\xE1ticamente.",
|
|
1053
1276
|
"perm.promptAuthorize": "opencode solicita autorizaci\xF3n",
|
|
1054
1277
|
"perm.promptPatterns": "opencode solicita acceso a: {list}",
|
|
1055
1278
|
"perm.promptResource": "opencode solicita acceso a los recursos: {list}",
|
|
1056
1279
|
"perm.promptTool": "opencode solicita ejecutar {tool}",
|
|
1057
1280
|
"qr.codeLabel": "C\xF3digo de emparejamiento",
|
|
1058
1281
|
"qr.fileWritten": "Informaci\xF3n de emparejamiento escrita en: {path}",
|
|
1059
|
-
"qr.
|
|
1060
|
-
"qr.openHint": "Abra el enlace en el navegador del tel\xE9fono o introduzca el c\xF3digo de emparejamiento manualmente en la aplicaci\xF3n.",
|
|
1282
|
+
"qr.openHint": "Abra la aplicaci\xF3n tunnelbox en el tel\xE9fono y escanee el c\xF3digo QR superior, o introduzca el c\xF3digo de emparejamiento manualmente en la aplicaci\xF3n.",
|
|
1061
1283
|
"qr.titleNoType": "emparejamiento de tel\xE9fono tunnelbox",
|
|
1062
1284
|
"qr.titleWithType": "emparejamiento de tel\xE9fono tunnelbox {type}",
|
|
1063
|
-
"qr.unavailable": "(qrcode no instalado: use el
|
|
1285
|
+
"qr.unavailable": "(qrcode no instalado: use el c\xF3digo de emparejamiento anterior)",
|
|
1064
1286
|
"claude.errBusy": "Esta sesi\xF3n est\xE1 en ejecuci\xF3n; espere a que termine o det\xE9ngala primero",
|
|
1065
1287
|
"claude.errTurn": "error de generaci\xF3n",
|
|
1066
1288
|
"claude.pairingStillClaimed": "Ya vinculado a una cuenta de tel\xE9fono: este c\xF3digo solo sirve para emparejar un nuevo dispositivo en la misma cuenta; el dispositivo actual se conecta directamente desde Mis computadoras",
|
|
@@ -1128,7 +1350,41 @@ var es_ES_default = {
|
|
|
1128
1350
|
"claude.errReadHistory": "No se pudo leer el historial de la sesi\xF3n ({id})",
|
|
1129
1351
|
"setup.langSet": "Idioma de ejecuci\xF3n establecido en",
|
|
1130
1352
|
"setup.langHint": "El adaptador emitir\xE1 en este idioma tras reiniciar (TUNNELBOX_LANG puede sobrescribirlo en tiempo de ejecuci\xF3n). Archivo de estado:",
|
|
1131
|
-
"setup.langCurrent": "Idioma de ejecuci\xF3n actual"
|
|
1353
|
+
"setup.langCurrent": "Idioma de ejecuci\xF3n actual",
|
|
1354
|
+
"hermes.errNoRelay": "URL del rel\xE9 no configurada: use --env para inyectar un valor predeterminado o sobrescr\xEDbalo en tiempo de ejecuci\xF3n con TUNNELBOX_RELAY_URL",
|
|
1355
|
+
"hermes.logConnected": "Conectado al rel\xE9 {url}",
|
|
1356
|
+
"hermes.logMsgUncaught": "Excepci\xF3n no capturada al procesar el mensaje: {message}",
|
|
1357
|
+
"hermes.logDisconnected": "Desconectado del rel\xE9, reconectando autom\xE1ticamente\u2026",
|
|
1358
|
+
"hermes.logPairCode": "C\xF3digo de emparejamiento generado: {code}",
|
|
1359
|
+
"hermes.logUnhandledType": "Tipo de mensaje no procesado: {type}",
|
|
1360
|
+
"hermes.logHandleFailed": "Error al procesar {type}: {message}",
|
|
1361
|
+
"hermes.logClaimed": "Vinculado a su cuenta de tel\xE9fono. El tel\xE9fono se conecta ahora directamente desde Mis computadoras",
|
|
1362
|
+
"hermes.logResetIdentity": "Desvinculado de la cuenta; restableciendo identidad y generando un nuevo c\xF3digo de emparejamiento\u2026",
|
|
1363
|
+
"hermes.cmdNew": "Nueva sesi\xF3n",
|
|
1364
|
+
"hermes.cmdHelp": "Mostrar ayuda",
|
|
1365
|
+
"hermes.newSessionTitle": "Nueva sesi\xF3n",
|
|
1366
|
+
"hermes.helpText": "Comandos admitidos:\n- /new nueva sesi\xF3n\n- /help mostrar ayuda",
|
|
1367
|
+
"hermes.errBusy": "Esta sesi\xF3n se est\xE1 generando; espere a que termine o det\xE9ngala primero",
|
|
1368
|
+
"hermes.errBadWorkspace": "Este directorio no existe o no se puede usar",
|
|
1369
|
+
"hermes.logWorkspaceSwitched": "Espacio de trabajo cambiado: {path}",
|
|
1370
|
+
"hermes.errWorkspaceMissing": "El espacio de trabajo no existe: {dir}",
|
|
1371
|
+
"hermes.errStartFailed": "Error al iniciar: {message}",
|
|
1372
|
+
"hermes.msgStarted": "Adaptador de Hermes iniciado (Ctrl+C para salir)",
|
|
1373
|
+
"hermes.logAbortSent": "Interrupci\xF3n enviada (session={session})",
|
|
1374
|
+
"hermes.logPromptFailed": "session.prompt fall\xF3: {message}",
|
|
1375
|
+
"hermes.logTurnError": "Error de turno (session={session}): {message}",
|
|
1376
|
+
"hermes.logPairForced": "--pair: solicitud forzada del c\xF3digo de emparejamiento (solo esta ejecuci\xF3n)",
|
|
1377
|
+
"hermes.pairingStillClaimed": "Ya vinculado a una cuenta de tel\xE9fono: este c\xF3digo solo sirve para reemparejar un nuevo dispositivo en la misma cuenta; el dispositivo actual se conecta directamente desde Mis computadoras",
|
|
1378
|
+
"hermes.logPairNoRelay": "No se puede solicitar un c\xF3digo de emparejamiento: no hay URL de rel\xE9 configurada",
|
|
1379
|
+
"hermes.errSpawnHermes": "No se puede iniciar Hermes ({bin}): confirme que est\xE1 instalado ({err})",
|
|
1380
|
+
"hermes.errHermesExit": "hermes sali\xF3 ({code}): {err}",
|
|
1381
|
+
"hermes.logSessionUpdated": "Sesi\xF3n actualizada (session={session})",
|
|
1382
|
+
"hermes.errNoInject": "Inyecci\xF3n de mensaje del tel\xE9fono no disponible (sesi\xF3n no interactiva o proceso no listo)",
|
|
1383
|
+
"hermes.pairNoRelay": "No se puede alcanzar el rel\xE9 (rel\xE9 inaccesible o websockets ausente)",
|
|
1384
|
+
"hermes.pairTimeout": "Tiempo de espera agotado al solicitar el c\xF3digo de emparejamiento (rel\xE9 sin respuesta)",
|
|
1385
|
+
"hermes.errToolPair": "fallo de tunnelbox_pair: {err}",
|
|
1386
|
+
"hermes.errToolStatus": "fallo de tunnelbox_status: {err}",
|
|
1387
|
+
"hermes.cliUsage": "Uso: /tunnelbox <pair|status>\n pair solicitar e imprimir un c\xF3digo de emparejamiento\n status mostrar estado de rel\xE9/enlace/conexi\xF3n"
|
|
1132
1388
|
};
|
|
1133
1389
|
|
|
1134
1390
|
// ../core/src/i18n.ts
|
|
@@ -1234,12 +1490,11 @@ function loadState(type) {
|
|
|
1234
1490
|
return fallback;
|
|
1235
1491
|
}
|
|
1236
1492
|
}
|
|
1237
|
-
function writePairingFile(
|
|
1493
|
+
function writePairingFile(code, type) {
|
|
1238
1494
|
const p = join(baseName(), `remote-pairing${suffix(type)}.txt`);
|
|
1239
1495
|
try {
|
|
1240
1496
|
mkdirSync(dirname(p), { recursive: true });
|
|
1241
1497
|
writeFileSync(p, `\u914D\u5BF9\u7801: ${code}
|
|
1242
|
-
\u914D\u5BF9\u94FE\u63A5: ${link}
|
|
1243
1498
|
`, "utf8");
|
|
1244
1499
|
} catch {
|
|
1245
1500
|
}
|
|
@@ -1276,19 +1531,14 @@ function padVisual(s, width, align = "left") {
|
|
|
1276
1531
|
}
|
|
1277
1532
|
return s + " ".repeat(pad);
|
|
1278
1533
|
}
|
|
1279
|
-
async function printPairing(
|
|
1534
|
+
async function printPairing(code, type, name, lang) {
|
|
1280
1535
|
const resolved = lang ? normalizeLang(lang) : resolveLang();
|
|
1281
|
-
const
|
|
1282
|
-
if (type) p.set("type", type);
|
|
1283
|
-
if (name) p.set("name", name);
|
|
1284
|
-
const link = `${relayHttpBase}/app/#/pages/index/index?${p.toString()}`;
|
|
1285
|
-
const file = writePairingFile(link, code, type);
|
|
1536
|
+
const file = writePairingFile(code, type);
|
|
1286
1537
|
const tt = (key, vars) => t(resolved, key, vars);
|
|
1287
1538
|
const title = type ? tt("qr.titleWithType", { type }) : tt("qr.titleNoType");
|
|
1288
1539
|
const codeLine = `${tt("qr.codeLabel")}: ${code}`;
|
|
1289
|
-
const linkLine = `${tt("qr.linkLabel")}: ${link}`;
|
|
1290
1540
|
const hint = tt("qr.openHint");
|
|
1291
|
-
const inner = Math.max(40, dispWidth(codeLine), dispWidth(
|
|
1541
|
+
const inner = Math.max(40, dispWidth(codeLine), dispWidth(title));
|
|
1292
1542
|
const W = Math.min(76, inner + 4);
|
|
1293
1543
|
const bar = "\u2500".repeat(W);
|
|
1294
1544
|
console.log("");
|
|
@@ -1296,7 +1546,6 @@ async function printPairing(relayHttpBase, code, type, name, lang) {
|
|
|
1296
1546
|
console.log("\u2502 " + padVisual(title, W - 2, "center") + " \u2502");
|
|
1297
1547
|
console.log("\u251C" + bar + "\u2524");
|
|
1298
1548
|
console.log("\u2502 " + padVisual(codeLine, W - 2) + " \u2502");
|
|
1299
|
-
console.log("\u2502 " + padVisual(linkLine, W - 2) + " \u2502");
|
|
1300
1549
|
console.log("\u2514" + bar + "\u2518");
|
|
1301
1550
|
console.log(" " + hint);
|
|
1302
1551
|
try {
|
|
@@ -1304,7 +1553,7 @@ async function printPairing(relayHttpBase, code, type, name, lang) {
|
|
|
1304
1553
|
const render = mod.default ?? mod;
|
|
1305
1554
|
const toString = render.toString;
|
|
1306
1555
|
if (toString) {
|
|
1307
|
-
const qr = await toString(
|
|
1556
|
+
const qr = await toString(code, { type: "terminal", small: true });
|
|
1308
1557
|
if (qr) console.log(qr);
|
|
1309
1558
|
}
|
|
1310
1559
|
} catch {
|
|
@@ -1833,9 +2082,6 @@ var ClaudeBridge = class {
|
|
|
1833
2082
|
get home() {
|
|
1834
2083
|
return this.currentWorkspace;
|
|
1835
2084
|
}
|
|
1836
|
-
get relayHttpBase() {
|
|
1837
|
-
return this.relayBase.replace(/^ws/, "http").replace(/\/+$/, "");
|
|
1838
|
-
}
|
|
1839
2085
|
async start() {
|
|
1840
2086
|
const url = (this.cfg.relayUrl || injectedRelayUrl() || "").replace(/\/+$/, "");
|
|
1841
2087
|
this.relayBase = url;
|
|
@@ -1865,10 +2111,6 @@ var ClaudeBridge = class {
|
|
|
1865
2111
|
msg.clientID = src.clientID;
|
|
1866
2112
|
this.send(msg);
|
|
1867
2113
|
}
|
|
1868
|
-
pairingLink(code) {
|
|
1869
|
-
const p = new URLSearchParams({ code, type: AGENT_TYPE, name: hostname() });
|
|
1870
|
-
return `${this.relayHttpBase}/app/#/pages/index/index?${p.toString()}`;
|
|
1871
|
-
}
|
|
1872
2114
|
connect(url) {
|
|
1873
2115
|
const agentID = this.state.agentId;
|
|
1874
2116
|
const wsUrl = `${url}/ws/agent?token=${encodeURIComponent(agentID)}`;
|
|
@@ -1963,13 +2205,12 @@ var ClaudeBridge = class {
|
|
|
1963
2205
|
switch (env.type) {
|
|
1964
2206
|
case "pair.created": {
|
|
1965
2207
|
const code = env.payload.code;
|
|
1966
|
-
|
|
1967
|
-
writePairingJson({ code, link, relayUrl: this.relayBase, at: Date.now() }, AGENT_TYPE);
|
|
2208
|
+
writePairingJson({ code, relayUrl: this.relayBase, at: Date.now() }, AGENT_TYPE);
|
|
1968
2209
|
this.log(this.tr("claude.logPairCode", { code }));
|
|
1969
2210
|
if (this.claimed) {
|
|
1970
2211
|
this.log(this.tr("claude.pairingStillClaimed"));
|
|
1971
2212
|
}
|
|
1972
|
-
void printPairing(
|
|
2213
|
+
void printPairing(code, AGENT_TYPE, hostname(), this.lang);
|
|
1973
2214
|
return;
|
|
1974
2215
|
}
|
|
1975
2216
|
case "agent.claimed":
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* tunnelbox 官方 Claude Code 插件 的 bin 工具(自包含 Node,无第三方依赖)。
|
|
4
4
|
*
|
|
5
5
|
* 子命令:
|
|
6
|
-
* pair —— 向中继申请配对码并打印(二维码可选由 qrcode
|
|
6
|
+
* pair —— 向中继申请配对码并打印(二维码可选由 qrcode 提供,缺省降级为配对码)
|
|
7
7
|
* status —— 打印中继/agent/绑定状态
|
|
8
8
|
* ask —— 供 hooks/PermissionRequest 调用:把当回合工具审批转发到手机
|
|
9
9
|
*
|
|
@@ -146,11 +146,6 @@ function connect(url, agentId) {
|
|
|
146
146
|
async function runPair() {
|
|
147
147
|
const state = loadState();
|
|
148
148
|
const relay = state.relayUrl.replace(/\/+$/, "");
|
|
149
|
-
const httpBase = relay.replace(/^ws/, "http");
|
|
150
|
-
const link = (code) => {
|
|
151
|
-
const p = new URLSearchParams({ code, type: AGENT_TYPE, name: hostname() });
|
|
152
|
-
return `${httpBase}/app/#/pages/index/index?${p.toString()}`;
|
|
153
|
-
};
|
|
154
149
|
|
|
155
150
|
if (state.claimed) {
|
|
156
151
|
console.log("本机已绑定手机账号,可直接在手机「我的电脑」里连接;如需重新配对,请先在手机端解绑。");
|
|
@@ -180,15 +175,13 @@ async function runPair() {
|
|
|
180
175
|
const code = m.payload?.code;
|
|
181
176
|
if (!code) return;
|
|
182
177
|
clearTimeout(t);
|
|
183
|
-
const l = link(code);
|
|
184
178
|
console.log("");
|
|
185
179
|
console.log("tunnelbox 手机配对");
|
|
186
180
|
console.log(" 配对码: " + code);
|
|
187
|
-
console.log("
|
|
188
|
-
console.log("手机浏览器打开链接,或打开 tunnelbox 应用输入配对码(一次性)。");
|
|
181
|
+
console.log("打开 tunnelbox App,用「扫一扫配对」扫描二维码,或手动输入配对码(一次性)。");
|
|
189
182
|
try {
|
|
190
183
|
mkdirSync(dirname(PAIRING_PATH()), { recursive: true });
|
|
191
|
-
writeFileSync(PAIRING_PATH(), `配对码: ${code}\n
|
|
184
|
+
writeFileSync(PAIRING_PATH(), `配对码: ${code}\n`, "utf8");
|
|
192
185
|
} catch {
|
|
193
186
|
/* ignore */
|
|
194
187
|
}
|
|
@@ -8,5 +8,5 @@ disable-model-invocation: true
|
|
|
8
8
|
本技能用于把本机 Claude Code 绑定到手机上的 tunnelbox。
|
|
9
9
|
|
|
10
10
|
1. 运行命令:`tunnelbox pair`
|
|
11
|
-
2.
|
|
12
|
-
3.
|
|
11
|
+
2. 把命令输出的**配对码**原样、完整地展示给用户(保留代码格式)。
|
|
12
|
+
3. 向用户说明:打开手机上的 tunnelbox App,用「扫一扫配对」扫描二维码,或输入配对码;配对码为一次性,使用后即失效。
|
package/package.json
CHANGED