@tunnelbox/core 0.1.27 → 0.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +765 -8
- package/locales/de-DE.json +38 -1
- package/locales/en-US.json +38 -1
- package/locales/es-ES.json +38 -1
- package/locales/fr-FR.json +38 -1
- package/locales/ja-JP.json +38 -1
- package/locales/ko-KR.json +38 -1
- package/locales/zh-CN.json +38 -1
- package/locales/zh-TW.json +38 -1
- package/package.json +1 -1
- package/src/acp/client.ts +187 -0
- package/src/acp/index.ts +11 -0
- package/src/acp/map.ts +45 -0
- package/src/acp/mirror.ts +210 -0
- package/src/acp/permissions.ts +47 -0
- package/src/acp/protocol.ts +282 -0
- package/src/acp/supervisor.ts +158 -0
- package/src/index.ts +2 -1
- package/src/types.ts +7 -1
package/dist/index.js
CHANGED
|
@@ -403,6 +403,8 @@ var zh_CN_default = {
|
|
|
403
403
|
"adapter.logToolReason": "dsh \u8BF7\u6C42\u6267\u884C\u5DE5\u5177 {tool}",
|
|
404
404
|
"adapter.logGatewayConnected": "\u5DF2\u8FDE\u63A5\u672C\u673A OpenClaw Gateway\uFF08{version}\uFF09",
|
|
405
405
|
"adapter.logGatewayDisconnected": "\u4E0E OpenClaw Gateway \u65AD\u5F00\uFF0C\u6B63\u5728\u7531\u5B98\u65B9\u5BA2\u6237\u7AEF\u91CD\u8FDE\u2026",
|
|
406
|
+
"adapter.logSessionResync": "\u4F1A\u8BDD {session}\uFF1Aagent \u4E8B\u4EF6 seq \u524D\u8DF3\uFF0C\u91CD\u62C9\u5386\u53F2",
|
|
407
|
+
"adapter.warnGatewayVersionBelowSupported": "OpenClaw Gateway {version} \u4F4E\u4E8E\u6700\u4F4E\u652F\u6301\u7248\u672C {min}\uFF1B\u90E8\u5206\u529F\u80FD\u53EF\u80FD\u4E0D\u53EF\u7528",
|
|
406
408
|
"adapter.logGatewayConnectFailed": "\u65E0\u6CD5\u8FDE\u63A5\u672C\u673A OpenClaw Gateway\uFF08\u8BF7\u68C0\u67E5\u7F51\u5173\u9274\u6743\uFF1Atoken \u6216\u8BBE\u5907\u5BA1\u6279\uFF09",
|
|
407
409
|
"adapter.logGatewayCredentialSource": "\u4F7F\u7528\u6765\u81EA {source} \u7684 OpenClaw Gateway \u51ED\u636E",
|
|
408
410
|
"adapter.logGatewayAutoStart": "\u672C\u673A OpenClaw Gateway \u672A\u8FD0\u884C\uFF0C\u6B63\u5728\u542F\u52A8\uFF08mode={mode}\uFF09\u2026",
|
|
@@ -423,6 +425,7 @@ var zh_CN_default = {
|
|
|
423
425
|
"adapter.checkAuthStatusMissing": "\u4E0D\u5B58\u5728",
|
|
424
426
|
"adapter.checkAuthStatusUnparsable": "\u89E3\u6790\u5931\u8D25",
|
|
425
427
|
"adapter.checkAuthMode": "\u9274\u6743\u6A21\u5F0F\uFF1A{mode}",
|
|
428
|
+
"adapter.checkAuthExtraPaths": "\u989D\u5916\u51ED\u636E\u6587\u4EF6\uFF1A{paths}",
|
|
426
429
|
"adapter.checkAuthSource": "\u51ED\u636E\u6765\u6E90\uFF1A{source}",
|
|
427
430
|
"adapter.checkAuthReachable": "\u7F51\u5173\u53EF\u8FBE\uFF1A{value}",
|
|
428
431
|
"adapter.saveTokenPrompt": "\u8BF7\u7C98\u8D34 OpenClaw Gateway token\uFF08\u53EF\u7528 `openclaw gateway auth-token --show` \u67E5\u770B\uFF09\u540E\u56DE\u8F66\uFF1A",
|
|
@@ -454,6 +457,7 @@ var zh_CN_default = {
|
|
|
454
457
|
"adapter.errAppServerExit": "codex app-server \u5DF2\u9000\u51FA\uFF0C\u8FDB\u884C\u4E2D\u7684\u5BA1\u6279/\u9009\u62E9\u5DF2\u81EA\u52A8\u62D2\u7EDD",
|
|
455
458
|
"adapter.logUnsupportedServerRequest": "\u6682\u4E0D\u652F\u6301\u7684 app-server \u8BF7\u6C42: {method}",
|
|
456
459
|
"adapter.logQuestionNative": "\u9009\u62E9\u8BF7\u6C42 \u2192 \u624B\u673A\u9009\u62E9\u5361 questionID={id} (session={session})",
|
|
460
|
+
"adapter.logQuestionReplyFailed": "\u63D0\u95EE\u5E94\u7B54\u5931\u8D25\uFF08{id}\uFF09\uFF1A{message}",
|
|
457
461
|
"adapter.logPermissionNative": "\u5BA1\u6279\u8BF7\u6C42 \u2192 \u624B\u673A\u6743\u9650\u5361 permissionID={id} (session={session})",
|
|
458
462
|
"adapter.checkAppServerOk": "codex app-server \u53EF\u7528",
|
|
459
463
|
"adapter.checkAppServerMissing": "\u5F53\u524D Codex CLI \u4E0D\u652F\u6301 `codex app-server`\uFF08\u8BF7\u5347\u7EA7 Codex CLI\uFF09",
|
|
@@ -524,7 +528,40 @@ var zh_CN_default = {
|
|
|
524
528
|
"hermes.logRegisterAskFailed": "tunnelbox: \u6CE8\u518C tunnelbox_ask \u5931\u8D25: {err}",
|
|
525
529
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: \u6CE8\u518C system prompt \u6BB5\u5931\u8D25: {err}",
|
|
526
530
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: \u540E\u53F0\u6865\u542F\u52A8\u5931\u8D25: {err}",
|
|
527
|
-
"hermes.systemPromptAsk": "\u5F53\u4F60\u9700\u8981\u7528\u6237\u505A\u51B3\u5B9A/\u6F84\u6E05/\u9009\u62E9\uFF0C\u4E14\u5DF2\u8FDE\u63A5 tunnelbox \u624B\u673A\u65F6\uFF0C\u8BF7\u7528 `tunnelbox_ask` \u5DE5\u5177\u5728\u624B\u673A\u4E0A\u63D0\u95EE\uFF0C\u800C\u4E0D\u662F\u81EA\u884C\u731C\u6D4B\uFF1B\u7B49\u5230\u7528\u6237\u4F5C\u7B54\u540E\u518D\u7EE7\u7EED\u3002"
|
|
531
|
+
"hermes.systemPromptAsk": "\u5F53\u4F60\u9700\u8981\u7528\u6237\u505A\u51B3\u5B9A/\u6F84\u6E05/\u9009\u62E9\uFF0C\u4E14\u5DF2\u8FDE\u63A5 tunnelbox \u624B\u673A\u65F6\uFF0C\u8BF7\u7528 `tunnelbox_ask` \u5DE5\u5177\u5728\u624B\u673A\u4E0A\u63D0\u95EE\uFF0C\u800C\u4E0D\u662F\u81EA\u884C\u731C\u6D4B\uFF1B\u7B49\u5230\u7528\u6237\u4F5C\u7B54\u540E\u518D\u7EE7\u7EED\u3002",
|
|
532
|
+
"adapter.warnCodebuddyCliMissing": '\u627E\u4E0D\u5230 CodeBuddy CLI \u53EF\u6267\u884C\u6587\u4EF6 "{bin}"\uFF1B\u8BF7\u5B89\u88C5\uFF08npm i -g @tencent-ai/codebuddy-code\uFF09\uFF0C\u6216\u5C06 TUNNELBOX_CODEBUDDY_BIN \u8BBE\u4E3A\u5176\u8DEF\u5F84',
|
|
533
|
+
"adapter.checkCodebuddyHeader": "tunnelbox-codebuddy \u73AF\u5883\u81EA\u68C0",
|
|
534
|
+
"adapter.checkCodebuddyCliMissing": "\u627E\u4E0D\u5230 CodeBuddy CLI \u53EF\u6267\u884C\u6587\u4EF6\uFF08{bin}\uFF09\uFF1B\u8BF7\u5B89\u88C5\uFF1Anpm i -g @tencent-ai/codebuddy-code",
|
|
535
|
+
"adapter.checkCodebuddyAcpHint": "\u5DF2\u68C0\u6D4B\u5230 CodeBuddy CLI\uFF1BACP \u6A21\u5F0F\uFF08`codebuddy --acp`\uFF09\u5C06\u63D0\u4F9B\u6D41\u5F0F/\u5BA1\u6279/\u9009\u62E9",
|
|
536
|
+
"adapter.errCodebuddyAcpSpawn": "\u65E0\u6CD5\u542F\u52A8 CodeBuddy `--acp`\uFF1A{message}\uFF08\u8BF7\u786E\u8BA4 CodeBuddy CLI \u652F\u6301 `--acp`\uFF09",
|
|
537
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP \u672A\u8FD4\u56DE\u4F1A\u8BDD id",
|
|
538
|
+
"adapter.codebuddySessionTitle": "CodeBuddy \u4F1A\u8BDD",
|
|
539
|
+
"adapter.logElicitationNative": "\u9009\u62E9/\u786E\u8BA4\u8BF7\u6C42 -> \u624B\u673A\u5361\u7247 id={id}\uFF08\u4F1A\u8BDD={session}\uFF09",
|
|
540
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy \u5C1A\u672A\u901A\u8FC7 ACP \u8BA4\u8BC1\uFF1B\u8BF7\u5148\u8FD0\u884C\u4E00\u6B21 `codebuddy` \u767B\u5F55\uFF08\u6216\u8BBE\u7F6E CODEBUDDY_API_KEY\uFF09\uFF0C\u4E5F\u53EF\u8BBE\u7F6E TUNNELBOX_CODEBUDDY_AUTH=<methodId> \u8D70 ACP \u8BA4\u8BC1",
|
|
541
|
+
"adapter.warnKimiCliMissing": '\u627E\u4E0D\u5230 Kimi CLI \u53EF\u6267\u884C\u6587\u4EF6 "{bin}"\uFF1B\u8BF7\u5B89\u88C5\uFF08https://moonshotai.github.io/kimi-code/\uFF09\uFF0C\u6216\u5C06 TUNNELBOX_KIMI_BIN \u8BBE\u4E3A\u5176\u8DEF\u5F84',
|
|
542
|
+
"adapter.checkKimiHeader": "tunnelbox-kimi \u73AF\u5883\u81EA\u68C0",
|
|
543
|
+
"adapter.checkKimiCliMissing": "\u627E\u4E0D\u5230 Kimi CLI \u53EF\u6267\u884C\u6587\u4EF6\uFF08{bin}\uFF09\uFF1B\u8BF7\u4ECE https://moonshotai.github.io/kimi-code/ \u5B89\u88C5",
|
|
544
|
+
"adapter.checkKimiAcpHint": "\u5DF2\u68C0\u6D4B\u5230 Kimi CLI\uFF1BACP \u6A21\u5F0F\uFF08`kimi acp`\uFF09\u5C06\u63D0\u4F9B\u6D41\u5F0F/\u5BA1\u6279/\u9009\u62E9",
|
|
545
|
+
"adapter.errKimiAcpSpawn": "\u65E0\u6CD5\u542F\u52A8 Kimi `acp`\uFF1A{message}\uFF08\u8BF7\u786E\u8BA4 Kimi CLI \u652F\u6301 `kimi acp`\uFF09",
|
|
546
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP \u672A\u8FD4\u56DE\u4F1A\u8BDD id",
|
|
547
|
+
"adapter.kimiSessionTitle": "Kimi \u4F1A\u8BDD",
|
|
548
|
+
"adapter.logKimiAuthRequired": "Kimi \u672A\u767B\u5F55\uFF1A\u8BF7\u5148\u8FD0\u884C\u4E00\u6B21 `kimi` \u5E76\u53D1\u9001 /login\uFF08\u6216\u914D\u7F6E API Key\uFF09\u2014\u2014 {message}",
|
|
549
|
+
"adapter.warnTraeCliMissing": '\u627E\u4E0D\u5230 TraeCode CLI \u53EF\u6267\u884C\u6587\u4EF6 "{bin}"\uFF1B\u8BF7\u5B89\u88C5\uFF08https://docs.trae.cn/cli_what-is-trae-cli\uFF09\uFF0C\u6216\u5C06 TUNNELBOX_TRAE_BIN \u8BBE\u4E3A\u5176\u8DEF\u5F84',
|
|
550
|
+
"adapter.checkTraeHeader": "tunnelbox-trae \u73AF\u5883\u81EA\u68C0",
|
|
551
|
+
"adapter.checkTraeCliMissing": "\u627E\u4E0D\u5230 TraeCode CLI \u53EF\u6267\u884C\u6587\u4EF6\uFF08{bin}\uFF09\uFF1B\u8BF7\u4ECE https://docs.trae.cn/cli_what-is-trae-cli \u5B89\u88C5",
|
|
552
|
+
"adapter.checkTraeAcpHint": "\u5DF2\u68C0\u6D4B\u5230 TraeCode CLI\uFF1BACP \u6A21\u5F0F\uFF08`traecli acp serve`\uFF09\u5C06\u63D0\u4F9B\u6D41\u5F0F/\u5BA1\u6279/\u9009\u62E9",
|
|
553
|
+
"adapter.errTraeAcpSpawn": "\u65E0\u6CD5\u542F\u52A8 TraeCode `acp serve`\uFF1A{message}\uFF08\u8BF7\u786E\u8BA4 TraeCode CLI \u652F\u6301 ACP\uFF09",
|
|
554
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP \u672A\u8FD4\u56DE\u4F1A\u8BDD id",
|
|
555
|
+
"adapter.traeSessionTitle": "Trae \u4F1A\u8BDD",
|
|
556
|
+
"adapter.logTraeAuthSkipped": "\u5DF2\u8DF3\u8FC7 TraeCode ACP \u8BA4\u8BC1\uFF1B\u8BF7\u7528 `traecli login` \u767B\u5F55\uFF08TraeCode CLI \u4EC5 TRAE \u4F01\u4E1A\u7248\u65D7\u8230\u7248\u53EF\u7528\uFF09",
|
|
557
|
+
"adapter.warnQoderCliMissing": '\u627E\u4E0D\u5230 Qoder CLI \u53EF\u6267\u884C\u6587\u4EF6 "{bin}"\uFF1B\u8BF7\u5B89\u88C5\uFF08npm i -g @qoder-ai/qodercli\uFF09\uFF0C\u6216\u5C06 TUNNELBOX_QODER_BIN \u8BBE\u4E3A\u5176\u8DEF\u5F84',
|
|
558
|
+
"adapter.checkQoderHeader": "tunnelbox-qoder \u73AF\u5883\u81EA\u68C0",
|
|
559
|
+
"adapter.checkQoderCliMissing": "\u627E\u4E0D\u5230 Qoder CLI \u53EF\u6267\u884C\u6587\u4EF6\uFF08{bin}\uFF09\uFF1B\u8BF7\u5B89\u88C5\uFF1Anpm i -g @qoder-ai/qodercli",
|
|
560
|
+
"adapter.checkQoderAcpHint": "\u5DF2\u68C0\u6D4B\u5230 Qoder CLI\uFF1BACP \u6A21\u5F0F\uFF08`qoder --acp`\uFF09\u5C06\u63D0\u4F9B\u6D41\u5F0F/\u5BA1\u6279/\u9009\u62E9",
|
|
561
|
+
"adapter.errQoderAcpSpawn": "\u65E0\u6CD5\u542F\u52A8 Qoder `--acp`\uFF1A{message}\uFF08\u8BF7\u786E\u8BA4 Qoder CLI \u652F\u6301 `--acp`\uFF09",
|
|
562
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP \u672A\u8FD4\u56DE\u4F1A\u8BDD id",
|
|
563
|
+
"adapter.qoderSessionTitle": "Qoder \u4F1A\u8BDD",
|
|
564
|
+
"adapter.logQoderAuthSkipped": "\u5DF2\u8DF3\u8FC7 Qoder ACP \u8BA4\u8BC1\uFF1B\u8BF7\u7528 `qoder login` \u767B\u5F55\uFF0C\u6216\u8BBE\u7F6E QODER_PERSONAL_ACCESS_TOKEN"
|
|
528
565
|
};
|
|
529
566
|
|
|
530
567
|
// locales/zh-TW.json
|
|
@@ -778,6 +815,8 @@ var zh_TW_default = {
|
|
|
778
815
|
"adapter.logToolReason": "dsh \u8ACB\u6C42\u57F7\u884C\u5DE5\u5177 {tool}",
|
|
779
816
|
"adapter.logGatewayConnected": "\u5DF2\u9023\u63A5\u672C\u6A5F OpenClaw Gateway\uFF08{version}\uFF09",
|
|
780
817
|
"adapter.logGatewayDisconnected": "\u8207 OpenClaw Gateway \u65B7\u958B\uFF0C\u6B63\u5728\u7531\u5B98\u65B9\u5BA2\u6236\u7AEF\u91CD\u9023\u2026",
|
|
818
|
+
"adapter.logSessionResync": "\u5DE5\u4F5C\u968E\u6BB5 {session}\uFF1Aagent \u4E8B\u4EF6 seq \u524D\u8DF3\uFF0C\u91CD\u65B0\u8F09\u5165\u6B77\u53F2",
|
|
819
|
+
"adapter.warnGatewayVersionBelowSupported": "OpenClaw Gateway {version} \u4F4E\u65BC\u6700\u4F4E\u652F\u63F4\u7248\u672C {min}\uFF1B\u90E8\u5206\u529F\u80FD\u53EF\u80FD\u7121\u6CD5\u4F7F\u7528",
|
|
781
820
|
"adapter.logGatewayConnectFailed": "\u7121\u6CD5\u9023\u63A5\u672C\u6A5F OpenClaw Gateway\uFF08\u8ACB\u6AA2\u67E5\u9598\u9053\u9451\u6B0A\uFF1Atoken \u6216\u88DD\u7F6E\u5BE9\u6279\uFF09",
|
|
782
821
|
"adapter.logGatewayCredentialSource": "\u4F7F\u7528\u4F86\u81EA {source} \u7684 OpenClaw Gateway \u6191\u8B49",
|
|
783
822
|
"adapter.logGatewayAutoStart": "\u672C\u6A5F OpenClaw Gateway \u672A\u57F7\u884C\uFF0C\u6B63\u5728\u555F\u52D5\uFF08mode={mode}\uFF09\u2026",
|
|
@@ -798,6 +837,7 @@ var zh_TW_default = {
|
|
|
798
837
|
"adapter.checkAuthStatusMissing": "\u4E0D\u5B58\u5728",
|
|
799
838
|
"adapter.checkAuthStatusUnparsable": "\u89E3\u6790\u5931\u6557",
|
|
800
839
|
"adapter.checkAuthMode": "\u9451\u6B0A\u6A21\u5F0F\uFF1A{mode}",
|
|
840
|
+
"adapter.checkAuthExtraPaths": "\u984D\u5916\u6191\u8B49\u6A94\u6848\uFF1A{paths}",
|
|
801
841
|
"adapter.checkAuthSource": "\u6191\u8B49\u4F86\u6E90\uFF1A{source}",
|
|
802
842
|
"adapter.checkAuthReachable": "\u9598\u9053\u53EF\u9054\uFF1A{value}",
|
|
803
843
|
"adapter.saveTokenPrompt": "\u8ACB\u8CBC\u4E0A OpenClaw Gateway token\uFF08\u53EF\u7528 `openclaw gateway auth-token --show` \u67E5\u770B\uFF09\u5F8C\u6309 Enter\uFF1A",
|
|
@@ -829,6 +869,7 @@ var zh_TW_default = {
|
|
|
829
869
|
"adapter.errAppServerExit": "codex app-server \u5DF2\u7D50\u675F\uFF0C\u9032\u884C\u4E2D\u7684\u5BE9\u6279/\u9078\u64C7\u5DF2\u81EA\u52D5\u62D2\u7D55",
|
|
830
870
|
"adapter.logUnsupportedServerRequest": "\u66AB\u4E0D\u652F\u63F4\u7684 app-server \u8ACB\u6C42: {method}",
|
|
831
871
|
"adapter.logQuestionNative": "\u9078\u64C7\u8ACB\u6C42 \u2192 \u624B\u6A5F\u9078\u64C7\u5361 questionID={id} (session={session})",
|
|
872
|
+
"adapter.logQuestionReplyFailed": "\u63D0\u554F\u61C9\u7B54\u5931\u6557\uFF08{id}\uFF09\uFF1A{message}",
|
|
832
873
|
"adapter.logPermissionNative": "\u5BE9\u6279\u8ACB\u6C42 \u2192 \u624B\u6A5F\u6B0A\u9650\u5361 permissionID={id} (session={session})",
|
|
833
874
|
"adapter.checkAppServerOk": "codex app-server \u53EF\u7528",
|
|
834
875
|
"adapter.checkAppServerMissing": "\u76EE\u524D Codex CLI \u4E0D\u652F\u63F4 `codex app-server`\uFF08\u8ACB\u5347\u7D1A Codex CLI\uFF09",
|
|
@@ -899,7 +940,40 @@ var zh_TW_default = {
|
|
|
899
940
|
"hermes.logRegisterAskFailed": "tunnelbox: \u8A3B\u518A tunnelbox_ask \u5931\u6557: {err}",
|
|
900
941
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: \u8A3B\u518A system prompt \u6BB5\u5931\u6557: {err}",
|
|
901
942
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: \u80CC\u666F\u6A4B\u555F\u52D5\u5931\u6557: {err}",
|
|
902
|
-
"hermes.systemPromptAsk": "\u7576\u4F60\u9700\u8981\u4F7F\u7528\u8005\u505A\u6C7A\u5B9A/\u6F84\u6E05/\u9078\u64C7\uFF0C\u4E14\u5DF2\u9023\u63A5 tunnelbox \u624B\u6A5F\u6642\uFF0C\u8ACB\u7528 `tunnelbox_ask` \u5DE5\u5177\u5728\u624B\u6A5F\u4E0A\u63D0\u554F\uFF0C\u800C\u4E0D\u662F\u81EA\u884C\u731C\u6E2C\uFF1B\u7B49\u5230\u4F7F\u7528\u8005\u4F5C\u7B54\u5F8C\u518D\u7E7C\u7E8C\u3002"
|
|
943
|
+
"hermes.systemPromptAsk": "\u7576\u4F60\u9700\u8981\u4F7F\u7528\u8005\u505A\u6C7A\u5B9A/\u6F84\u6E05/\u9078\u64C7\uFF0C\u4E14\u5DF2\u9023\u63A5 tunnelbox \u624B\u6A5F\u6642\uFF0C\u8ACB\u7528 `tunnelbox_ask` \u5DE5\u5177\u5728\u624B\u6A5F\u4E0A\u63D0\u554F\uFF0C\u800C\u4E0D\u662F\u81EA\u884C\u731C\u6E2C\uFF1B\u7B49\u5230\u4F7F\u7528\u8005\u4F5C\u7B54\u5F8C\u518D\u7E7C\u7E8C\u3002",
|
|
944
|
+
"adapter.warnCodebuddyCliMissing": '\u627E\u4E0D\u5230 CodeBuddy CLI \u53EF\u57F7\u884C\u6A94 "{bin}"\uFF1B\u8ACB\u5B89\u88DD\uFF08npm i -g @tencent-ai/codebuddy-code\uFF09\uFF0C\u6216\u5C07 TUNNELBOX_CODEBUDDY_BIN \u8A2D\u70BA\u5176\u8DEF\u5F91',
|
|
945
|
+
"adapter.checkCodebuddyHeader": "tunnelbox-codebuddy \u74B0\u5883\u81EA\u6AA2",
|
|
946
|
+
"adapter.checkCodebuddyCliMissing": "\u627E\u4E0D\u5230 CodeBuddy CLI \u53EF\u57F7\u884C\u6A94\uFF08{bin}\uFF09\uFF1B\u8ACB\u5B89\u88DD\uFF1Anpm i -g @tencent-ai/codebuddy-code",
|
|
947
|
+
"adapter.checkCodebuddyAcpHint": "\u5DF2\u5075\u6E2C\u5230 CodeBuddy CLI\uFF1BACP \u6A21\u5F0F\uFF08`codebuddy --acp`\uFF09\u5C07\u63D0\u4F9B\u4E32\u6D41/\u5BE9\u6279/\u9078\u64C7",
|
|
948
|
+
"adapter.errCodebuddyAcpSpawn": "\u7121\u6CD5\u555F\u52D5 CodeBuddy `--acp`\uFF1A{message}\uFF08\u8ACB\u78BA\u8A8D CodeBuddy CLI \u652F\u63F4 `--acp`\uFF09",
|
|
949
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP \u672A\u56DE\u50B3\u5DE5\u4F5C\u968E\u6BB5 id",
|
|
950
|
+
"adapter.codebuddySessionTitle": "CodeBuddy \u5DE5\u4F5C\u968E\u6BB5",
|
|
951
|
+
"adapter.logElicitationNative": "\u9078\u64C7/\u78BA\u8A8D\u8ACB\u6C42 -> \u624B\u6A5F\u5361\u7247 id={id}\uFF08\u5DE5\u4F5C\u968E\u6BB5={session}\uFF09",
|
|
952
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy \u5C1A\u672A\u900F\u904E ACP \u8A8D\u8B49\uFF1B\u8ACB\u5148\u57F7\u884C\u4E00\u6B21 `codebuddy` \u767B\u5165\uFF08\u6216\u8A2D\u5B9A CODEBUDDY_API_KEY\uFF09\uFF0C\u4E5F\u53EF\u8A2D\u5B9A TUNNELBOX_CODEBUDDY_AUTH=<methodId> \u8D70 ACP \u8A8D\u8B49",
|
|
953
|
+
"adapter.warnKimiCliMissing": '\u627E\u4E0D\u5230 Kimi CLI \u53EF\u57F7\u884C\u6A94 "{bin}"\uFF1B\u8ACB\u5B89\u88DD\uFF08https://moonshotai.github.io/kimi-code/\uFF09\uFF0C\u6216\u5C07 TUNNELBOX_KIMI_BIN \u8A2D\u70BA\u5176\u8DEF\u5F91',
|
|
954
|
+
"adapter.checkKimiHeader": "tunnelbox-kimi \u74B0\u5883\u81EA\u6AA2",
|
|
955
|
+
"adapter.checkKimiCliMissing": "\u627E\u4E0D\u5230 Kimi CLI \u53EF\u57F7\u884C\u6A94\uFF08{bin}\uFF09\uFF1B\u8ACB\u5F9E https://moonshotai.github.io/kimi-code/ \u5B89\u88DD",
|
|
956
|
+
"adapter.checkKimiAcpHint": "\u5DF2\u5075\u6E2C\u5230 Kimi CLI\uFF1BACP \u6A21\u5F0F\uFF08`kimi acp`\uFF09\u5C07\u63D0\u4F9B\u4E32\u6D41/\u5BE9\u6279/\u9078\u64C7",
|
|
957
|
+
"adapter.errKimiAcpSpawn": "\u7121\u6CD5\u555F\u52D5 Kimi `acp`\uFF1A{message}\uFF08\u8ACB\u78BA\u8A8D Kimi CLI \u652F\u63F4 `kimi acp`\uFF09",
|
|
958
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP \u672A\u56DE\u50B3\u5DE5\u4F5C\u968E\u6BB5 id",
|
|
959
|
+
"adapter.kimiSessionTitle": "Kimi \u5DE5\u4F5C\u968E\u6BB5",
|
|
960
|
+
"adapter.logKimiAuthRequired": "Kimi \u672A\u767B\u5165\uFF1A\u8ACB\u5148\u57F7\u884C\u4E00\u6B21 `kimi` \u4E26\u50B3\u9001 /login\uFF08\u6216\u8A2D\u5B9A API Key\uFF09\u2014\u2014 {message}",
|
|
961
|
+
"adapter.warnTraeCliMissing": '\u627E\u4E0D\u5230 TraeCode CLI \u53EF\u57F7\u884C\u6A94 "{bin}"\uFF1B\u8ACB\u5B89\u88DD\uFF08https://docs.trae.cn/cli_what-is-trae-cli\uFF09\uFF0C\u6216\u5C07 TUNNELBOX_TRAE_BIN \u8A2D\u70BA\u5176\u8DEF\u5F91',
|
|
962
|
+
"adapter.checkTraeHeader": "tunnelbox-trae \u74B0\u5883\u81EA\u6AA2",
|
|
963
|
+
"adapter.checkTraeCliMissing": "\u627E\u4E0D\u5230 TraeCode CLI \u53EF\u57F7\u884C\u6A94\uFF08{bin}\uFF09\uFF1B\u8ACB\u5F9E https://docs.trae.cn/cli_what-is-trae-cli \u5B89\u88DD",
|
|
964
|
+
"adapter.checkTraeAcpHint": "\u5DF2\u5075\u6E2C\u5230 TraeCode CLI\uFF1BACP \u6A21\u5F0F\uFF08`traecli acp serve`\uFF09\u5C07\u63D0\u4F9B\u4E32\u6D41/\u5BE9\u6279/\u9078\u64C7",
|
|
965
|
+
"adapter.errTraeAcpSpawn": "\u7121\u6CD5\u555F\u52D5 TraeCode `acp serve`\uFF1A{message}\uFF08\u8ACB\u78BA\u8A8D TraeCode CLI \u652F\u63F4 ACP\uFF09",
|
|
966
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP \u672A\u56DE\u50B3\u5DE5\u4F5C\u968E\u6BB5 id",
|
|
967
|
+
"adapter.traeSessionTitle": "Trae \u5DE5\u4F5C\u968E\u6BB5",
|
|
968
|
+
"adapter.logTraeAuthSkipped": "\u5DF2\u7565\u904E TraeCode ACP \u8A8D\u8B49\uFF1B\u8ACB\u7528 `traecli login` \u767B\u5165\uFF08TraeCode CLI \u50C5 TRAE \u4F01\u696D\u7248\u65D7\u8266\u7248\u53EF\u7528\uFF09",
|
|
969
|
+
"adapter.warnQoderCliMissing": '\u627E\u4E0D\u5230 Qoder CLI \u53EF\u57F7\u884C\u6A94 "{bin}"\uFF1B\u8ACB\u5B89\u88DD\uFF08npm i -g @qoder-ai/qodercli\uFF09\uFF0C\u6216\u5C07 TUNNELBOX_QODER_BIN \u8A2D\u70BA\u5176\u8DEF\u5F91',
|
|
970
|
+
"adapter.checkQoderHeader": "tunnelbox-qoder \u74B0\u5883\u81EA\u6AA2",
|
|
971
|
+
"adapter.checkQoderCliMissing": "\u627E\u4E0D\u5230 Qoder CLI \u53EF\u57F7\u884C\u6A94\uFF08{bin}\uFF09\uFF1B\u8ACB\u5B89\u88DD\uFF1Anpm i -g @qoder-ai/qodercli",
|
|
972
|
+
"adapter.checkQoderAcpHint": "\u5DF2\u5075\u6E2C\u5230 Qoder CLI\uFF1BACP \u6A21\u5F0F\uFF08`qoder --acp`\uFF09\u5C07\u63D0\u4F9B\u4E32\u6D41/\u5BE9\u6279/\u9078\u64C7",
|
|
973
|
+
"adapter.errQoderAcpSpawn": "\u7121\u6CD5\u555F\u52D5 Qoder `--acp`\uFF1A{message}\uFF08\u8ACB\u78BA\u8A8D Qoder CLI \u652F\u63F4 `--acp`\uFF09",
|
|
974
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP \u672A\u56DE\u50B3\u5DE5\u4F5C\u968E\u6BB5 id",
|
|
975
|
+
"adapter.qoderSessionTitle": "Qoder \u5DE5\u4F5C\u968E\u6BB5",
|
|
976
|
+
"adapter.logQoderAuthSkipped": "\u5DF2\u7565\u904E Qoder ACP \u8A8D\u8B49\uFF1B\u8ACB\u7528 `qoder login` \u767B\u5165\uFF0C\u6216\u8A2D\u5B9A QODER_PERSONAL_ACCESS_TOKEN"
|
|
903
977
|
};
|
|
904
978
|
|
|
905
979
|
// locales/en-US.json
|
|
@@ -1153,6 +1227,8 @@ var en_US_default = {
|
|
|
1153
1227
|
"adapter.logToolReason": "dsh requests to run tool {tool}",
|
|
1154
1228
|
"adapter.logGatewayConnected": "Connected to local OpenClaw Gateway ({version})",
|
|
1155
1229
|
"adapter.logGatewayDisconnected": "Disconnected from OpenClaw Gateway; the official client is reconnecting\u2026",
|
|
1230
|
+
"adapter.logSessionResync": "Session {session}: agent event gap, reloading history",
|
|
1231
|
+
"adapter.warnGatewayVersionBelowSupported": "OpenClaw Gateway {version} is below the minimum supported version {min}; some features may be unavailable",
|
|
1156
1232
|
"adapter.logGatewayConnectFailed": "Cannot connect to local OpenClaw Gateway (check gateway auth: token or device approval)",
|
|
1157
1233
|
"adapter.logGatewayCredentialSource": "Using OpenClaw Gateway credential from {source}",
|
|
1158
1234
|
"adapter.logGatewayAutoStart": "Local OpenClaw Gateway is not running; starting it (mode={mode})\u2026",
|
|
@@ -1173,6 +1249,7 @@ var en_US_default = {
|
|
|
1173
1249
|
"adapter.checkAuthStatusMissing": "missing",
|
|
1174
1250
|
"adapter.checkAuthStatusUnparsable": "unparsable",
|
|
1175
1251
|
"adapter.checkAuthMode": "auth mode: {mode}",
|
|
1252
|
+
"adapter.checkAuthExtraPaths": "extra credential files: {paths}",
|
|
1176
1253
|
"adapter.checkAuthSource": "credential source: {source}",
|
|
1177
1254
|
"adapter.checkAuthReachable": "gateway reachable: {value}",
|
|
1178
1255
|
"adapter.saveTokenPrompt": "Paste the OpenClaw Gateway token (from `openclaw gateway auth-token --show`) and press Enter:",
|
|
@@ -1204,6 +1281,7 @@ var en_US_default = {
|
|
|
1204
1281
|
"adapter.errAppServerExit": "codex app-server exited; pending approvals/choices were auto-declined",
|
|
1205
1282
|
"adapter.logUnsupportedServerRequest": "unsupported app-server request: {method}",
|
|
1206
1283
|
"adapter.logQuestionNative": "choice request -> phone choice card questionID={id} (session={session})",
|
|
1284
|
+
"adapter.logQuestionReplyFailed": "Question reply failed ({id}): {message}",
|
|
1207
1285
|
"adapter.logPermissionNative": "approval request -> phone approval card permissionID={id} (session={session})",
|
|
1208
1286
|
"adapter.checkAppServerOk": "codex app-server available",
|
|
1209
1287
|
"adapter.checkAppServerMissing": "this Codex CLI does not support `codex app-server` (please upgrade Codex CLI)",
|
|
@@ -1274,7 +1352,40 @@ var en_US_default = {
|
|
|
1274
1352
|
"hermes.logRegisterAskFailed": "tunnelbox: failed to register tunnelbox_ask: {err}",
|
|
1275
1353
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: failed to register system prompt section: {err}",
|
|
1276
1354
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: background bridge failed to start: {err}",
|
|
1277
|
-
"hermes.systemPromptAsk": "When you need a decision, clarification, or choice from the user and a tunnelbox phone is attached, use the `tunnelbox_ask` tool to ask on their phone instead of guessing. Wait for their answer before proceeding."
|
|
1355
|
+
"hermes.systemPromptAsk": "When you need a decision, clarification, or choice from the user and a tunnelbox phone is attached, use the `tunnelbox_ask` tool to ask on their phone instead of guessing. Wait for their answer before proceeding.",
|
|
1356
|
+
"adapter.warnCodebuddyCliMissing": 'CodeBuddy CLI executable "{bin}" not found; install it (npm i -g @tencent-ai/codebuddy-code) or set TUNNELBOX_CODEBUDDY_BIN to its path',
|
|
1357
|
+
"adapter.checkCodebuddyHeader": "tunnelbox-codebuddy environment check",
|
|
1358
|
+
"adapter.checkCodebuddyCliMissing": "CodeBuddy CLI executable not found ({bin}); install it with: npm i -g @tencent-ai/codebuddy-code",
|
|
1359
|
+
"adapter.checkCodebuddyAcpHint": "CodeBuddy CLI detected; ACP mode (`codebuddy --acp`) will provide streaming/approval/selection",
|
|
1360
|
+
"adapter.errCodebuddyAcpSpawn": "Failed to start CodeBuddy `--acp`: {message} (make sure CodeBuddy CLI supports `--acp`)",
|
|
1361
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP did not return a session id",
|
|
1362
|
+
"adapter.codebuddySessionTitle": "CodeBuddy session",
|
|
1363
|
+
"adapter.logElicitationNative": "elicitation request -> phone card id={id} (session={session})",
|
|
1364
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy ACP is not authenticated; log in once with `codebuddy` (or set CODEBUDDY_API_KEY), or set TUNNELBOX_CODEBUDDY_AUTH=<methodId> to authenticate over ACP",
|
|
1365
|
+
"adapter.warnKimiCliMissing": 'Kimi CLI executable "{bin}" not found; install it (https://moonshotai.github.io/kimi-code/) or set TUNNELBOX_KIMI_BIN to its path',
|
|
1366
|
+
"adapter.checkKimiHeader": "tunnelbox-kimi environment check",
|
|
1367
|
+
"adapter.checkKimiCliMissing": "Kimi CLI executable not found ({bin}); install it from https://moonshotai.github.io/kimi-code/",
|
|
1368
|
+
"adapter.checkKimiAcpHint": "Kimi CLI detected; ACP mode (`kimi acp`) will provide streaming/approval/selection",
|
|
1369
|
+
"adapter.errKimiAcpSpawn": "Failed to start Kimi `acp`: {message} (make sure the Kimi CLI supports `kimi acp`)",
|
|
1370
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP did not return a session id",
|
|
1371
|
+
"adapter.kimiSessionTitle": "Kimi session",
|
|
1372
|
+
"adapter.logKimiAuthRequired": "Kimi is not logged in: run `kimi` once and send /login (or configure an API key) \u2014 {message}",
|
|
1373
|
+
"adapter.warnTraeCliMissing": 'TraeCode CLI executable "{bin}" not found; install it (https://docs.trae.cn/cli_what-is-trae-cli) or set TUNNELBOX_TRAE_BIN to its path',
|
|
1374
|
+
"adapter.checkTraeHeader": "tunnelbox-trae environment check",
|
|
1375
|
+
"adapter.checkTraeCliMissing": "TraeCode CLI executable not found ({bin}); install it from https://docs.trae.cn/cli_what-is-trae-cli",
|
|
1376
|
+
"adapter.checkTraeAcpHint": "TraeCode CLI detected; ACP mode (`traecli acp serve`) will provide streaming/approval/selection",
|
|
1377
|
+
"adapter.errTraeAcpSpawn": "Failed to start TraeCode `acp serve`: {message} (make sure the TraeCode CLI supports ACP)",
|
|
1378
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP did not return a session id",
|
|
1379
|
+
"adapter.traeSessionTitle": "Trae session",
|
|
1380
|
+
"adapter.logTraeAuthSkipped": "TraeCode ACP authenticate skipped; log in with `traecli login` (TraeCode CLI requires a TRAE Enterprise Flagship plan)",
|
|
1381
|
+
"adapter.warnQoderCliMissing": 'Qoder CLI executable "{bin}" not found; install it (npm i -g @qoder-ai/qodercli) or set TUNNELBOX_QODER_BIN to its path',
|
|
1382
|
+
"adapter.checkQoderHeader": "tunnelbox-qoder environment check",
|
|
1383
|
+
"adapter.checkQoderCliMissing": "Qoder CLI executable not found ({bin}); install it with: npm i -g @qoder-ai/qodercli",
|
|
1384
|
+
"adapter.checkQoderAcpHint": "Qoder CLI detected; ACP mode (`qoder --acp`) will provide streaming/approval/selection",
|
|
1385
|
+
"adapter.errQoderAcpSpawn": "Failed to start Qoder `--acp`: {message} (make sure the Qoder CLI supports `--acp`)",
|
|
1386
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP did not return a session id",
|
|
1387
|
+
"adapter.qoderSessionTitle": "Qoder session",
|
|
1388
|
+
"adapter.logQoderAuthSkipped": "Qoder ACP authenticate skipped; log in with `qoder login` or set QODER_PERSONAL_ACCESS_TOKEN"
|
|
1278
1389
|
};
|
|
1279
1390
|
|
|
1280
1391
|
// locales/ja-JP.json
|
|
@@ -1528,6 +1639,8 @@ var ja_JP_default = {
|
|
|
1528
1639
|
"adapter.logToolReason": "dsh \u304C\u30C4\u30FC\u30EB {tool} \u306E\u5B9F\u884C\u3092\u8981\u6C42\u3057\u3066\u3044\u307E\u3059",
|
|
1529
1640
|
"adapter.logGatewayConnected": "\u30ED\u30FC\u30AB\u30EB OpenClaw Gateway \u306B\u63A5\u7D9A\u3057\u307E\u3057\u305F\uFF08{version}\uFF09",
|
|
1530
1641
|
"adapter.logGatewayDisconnected": "OpenClaw Gateway \u304B\u3089\u5207\u65AD\u3055\u308C\u307E\u3057\u305F\u3002\u516C\u5F0F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304C\u518D\u63A5\u7D9A\u3057\u3066\u3044\u307E\u3059\u2026",
|
|
1642
|
+
"adapter.logSessionResync": "\u30BB\u30C3\u30B7\u30E7\u30F3 {session}\uFF1Aagent \u30A4\u30D9\u30F3\u30C8\u306E seq \u304C\u98DB\u3093\u3060\u305F\u3081\u5C65\u6B74\u3092\u518D\u53D6\u5F97\u3057\u307E\u3059",
|
|
1643
|
+
"adapter.warnGatewayVersionBelowSupported": "OpenClaw Gateway {version} \u306F\u6700\u4F4E\u30B5\u30DD\u30FC\u30C8\u30D0\u30FC\u30B8\u30E7\u30F3 {min} \u672A\u6E80\u3067\u3059\u3002\u4E00\u90E8\u6A5F\u80FD\u304C\u5229\u7528\u3067\u304D\u306A\u3044\u5834\u5408\u304C\u3042\u308A\u307E\u3059",
|
|
1531
1644
|
"adapter.logGatewayConnectFailed": "\u30ED\u30FC\u30AB\u30EB OpenClaw Gateway \u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\uFF08\u30B2\u30FC\u30C8\u30A6\u30A7\u30A4\u8A8D\u8A3C\u3092\u78BA\u8A8D\uFF1Atoken \u307E\u305F\u306F\u30C7\u30D0\u30A4\u30B9\u627F\u8A8D\uFF09",
|
|
1532
1645
|
"adapter.logGatewayCredentialSource": "{source} \u306E OpenClaw Gateway \u8A8D\u8A3C\u60C5\u5831\u3092\u4F7F\u7528\u3057\u307E\u3059",
|
|
1533
1646
|
"adapter.logGatewayAutoStart": "\u30ED\u30FC\u30AB\u30EB OpenClaw Gateway \u304C\u8D77\u52D5\u3057\u3066\u3044\u306A\u3044\u305F\u3081\u8D77\u52D5\u3057\u307E\u3059\uFF08mode={mode}\uFF09\u2026",
|
|
@@ -1548,6 +1661,7 @@ var ja_JP_default = {
|
|
|
1548
1661
|
"adapter.checkAuthStatusMissing": "\u5B58\u5728\u3057\u307E\u305B\u3093",
|
|
1549
1662
|
"adapter.checkAuthStatusUnparsable": "\u89E3\u6790\u5931\u6557",
|
|
1550
1663
|
"adapter.checkAuthMode": "\u8A8D\u8A3C\u30E2\u30FC\u30C9: {mode}",
|
|
1664
|
+
"adapter.checkAuthExtraPaths": "\u8FFD\u52A0\u306E\u8A8D\u8A3C\u60C5\u5831\u30D5\u30A1\u30A4\u30EB: {paths}",
|
|
1551
1665
|
"adapter.checkAuthSource": "\u8A8D\u8A3C\u60C5\u5831\u306E\u53D6\u5F97\u5143: {source}",
|
|
1552
1666
|
"adapter.checkAuthReachable": "\u30B2\u30FC\u30C8\u30A6\u30A7\u30A4\u5230\u9054\u53EF\u80FD: {value}",
|
|
1553
1667
|
"adapter.saveTokenPrompt": "OpenClaw Gateway \u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8CBC\u308A\u4ED8\u3051\u3066 Enter\uFF08`openclaw gateway auth-token --show` \u3067\u78BA\u8A8D\uFF09:",
|
|
@@ -1579,6 +1693,7 @@ var ja_JP_default = {
|
|
|
1579
1693
|
"adapter.errAppServerExit": "codex app-server \u304C\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002\u4FDD\u7559\u4E2D\u306E\u627F\u8A8D/\u9078\u629E\u306F\u81EA\u52D5\u7684\u306B\u62D2\u5426\u3055\u308C\u307E\u3057\u305F",
|
|
1580
1694
|
"adapter.logUnsupportedServerRequest": "\u672A\u5BFE\u5FDC\u306E app-server \u30EA\u30AF\u30A8\u30B9\u30C8: {method}",
|
|
1581
1695
|
"adapter.logQuestionNative": "\u9078\u629E\u30EA\u30AF\u30A8\u30B9\u30C8 -> \u30B9\u30DE\u30DB\u9078\u629E\u30AB\u30FC\u30C9 questionID={id} (session={session})",
|
|
1696
|
+
"adapter.logQuestionReplyFailed": "\u8CEA\u554F\u3078\u306E\u5FDC\u7B54\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08{id}\uFF09\uFF1A{message}",
|
|
1582
1697
|
"adapter.logPermissionNative": "\u627F\u8A8D\u30EA\u30AF\u30A8\u30B9\u30C8 -> \u30B9\u30DE\u30DB\u627F\u8A8D\u30AB\u30FC\u30C9 permissionID={id} (session={session})",
|
|
1583
1698
|
"adapter.checkAppServerOk": "codex app-server \u5229\u7528\u53EF\u80FD",
|
|
1584
1699
|
"adapter.checkAppServerMissing": "\u3053\u306E Codex CLI \u306F `codex app-server` \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\uFF08Codex CLI \u3092\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
@@ -1649,7 +1764,40 @@ var ja_JP_default = {
|
|
|
1649
1764
|
"hermes.logRegisterAskFailed": "tunnelbox: tunnelbox_ask \u306E\u767B\u9332\u306B\u5931\u6557: {err}",
|
|
1650
1765
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: system prompt \u30BB\u30AF\u30B7\u30E7\u30F3\u306E\u767B\u9332\u306B\u5931\u6557: {err}",
|
|
1651
1766
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u30D6\u30EA\u30C3\u30B8\u306E\u8D77\u52D5\u306B\u5931\u6557: {err}",
|
|
1652
|
-
"hermes.systemPromptAsk": "\u30E6\u30FC\u30B6\u30FC\u306B\u6C7A\u5B9A/\u78BA\u8A8D/\u9078\u629E\u3092\u6C42\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u3001tunnelbox \u30B9\u30DE\u30DB\u304C\u63A5\u7D9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u63A8\u6E2C\u305B\u305A `tunnelbox_ask` \u30C4\u30FC\u30EB\u3067\u30B9\u30DE\u30DB\u306B\u8CEA\u554F\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u56DE\u7B54\u304C\u3042\u308B\u307E\u3067\u5F85\u3063\u3066\u304B\u3089\u7D9A\u884C\u3057\u307E\u3059\u3002"
|
|
1767
|
+
"hermes.systemPromptAsk": "\u30E6\u30FC\u30B6\u30FC\u306B\u6C7A\u5B9A/\u78BA\u8A8D/\u9078\u629E\u3092\u6C42\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u3001tunnelbox \u30B9\u30DE\u30DB\u304C\u63A5\u7D9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u63A8\u6E2C\u305B\u305A `tunnelbox_ask` \u30C4\u30FC\u30EB\u3067\u30B9\u30DE\u30DB\u306B\u8CEA\u554F\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u56DE\u7B54\u304C\u3042\u308B\u307E\u3067\u5F85\u3063\u3066\u304B\u3089\u7D9A\u884C\u3057\u307E\u3059\u3002",
|
|
1768
|
+
"adapter.warnCodebuddyCliMissing": 'CodeBuddy CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB "{bin}" \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\uFF08npm i -g @tencent-ai/codebuddy-code\uFF09\u304B\u3001TUNNELBOX_CODEBUDDY_BIN \u306B\u30D1\u30B9\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044',
|
|
1769
|
+
"adapter.checkCodebuddyHeader": "tunnelbox-codebuddy \u74B0\u5883\u30C1\u30A7\u30C3\u30AF",
|
|
1770
|
+
"adapter.checkCodebuddyCliMissing": "CodeBuddy CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF08{bin}\uFF09\u3002\u6B21\u3067\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044: npm i -g @tencent-ai/codebuddy-code",
|
|
1771
|
+
"adapter.checkCodebuddyAcpHint": "CodeBuddy CLI \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002ACP \u30E2\u30FC\u30C9\uFF08`codebuddy --acp`\uFF09\u3067\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0/\u627F\u8A8D/\u9078\u629E\u304C\u5229\u7528\u3067\u304D\u307E\u3059",
|
|
1772
|
+
"adapter.errCodebuddyAcpSpawn": "CodeBuddy `--acp` \u306E\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {message}\uFF08CodeBuddy CLI \u304C `--acp` \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
1773
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP \u304C\u30BB\u30C3\u30B7\u30E7\u30F3 id \u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F",
|
|
1774
|
+
"adapter.codebuddySessionTitle": "CodeBuddy \u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
1775
|
+
"adapter.logElicitationNative": "\u9078\u629E/\u78BA\u8A8D\u30EA\u30AF\u30A8\u30B9\u30C8 -> \u30B9\u30DE\u30DB\u306E\u30AB\u30FC\u30C9 id={id}\uFF08\u30BB\u30C3\u30B7\u30E7\u30F3={session}\uFF09",
|
|
1776
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy \u306F ACP \u3067\u8A8D\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u4E00\u5EA6 `codebuddy` \u3067\u30ED\u30B0\u30A4\u30F3\u3059\u308B\uFF08\u307E\u305F\u306F CODEBUDDY_API_KEY \u3092\u8A2D\u5B9A\u3059\u308B\uFF09\u304B\u3001TUNNELBOX_CODEBUDDY_AUTH=<methodId> \u3067 ACP \u8A8D\u8A3C\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044",
|
|
1777
|
+
"adapter.warnKimiCliMissing": 'Kimi CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB "{bin}" \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\uFF08https://moonshotai.github.io/kimi-code/\uFF09\u304B\u3001TUNNELBOX_KIMI_BIN \u306B\u30D1\u30B9\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044',
|
|
1778
|
+
"adapter.checkKimiHeader": "tunnelbox-kimi \u74B0\u5883\u30C1\u30A7\u30C3\u30AF",
|
|
1779
|
+
"adapter.checkKimiCliMissing": "Kimi CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF08{bin}\uFF09\u3002https://moonshotai.github.io/kimi-code/ \u304B\u3089\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
1780
|
+
"adapter.checkKimiAcpHint": "Kimi CLI \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002ACP \u30E2\u30FC\u30C9\uFF08`kimi acp`\uFF09\u3067\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0/\u627F\u8A8D/\u9078\u629E\u304C\u5229\u7528\u3067\u304D\u307E\u3059",
|
|
1781
|
+
"adapter.errKimiAcpSpawn": "Kimi `acp` \u306E\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {message}\uFF08Kimi CLI \u304C `kimi acp` \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
1782
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP \u304C\u30BB\u30C3\u30B7\u30E7\u30F3 id \u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F",
|
|
1783
|
+
"adapter.kimiSessionTitle": "Kimi \u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
1784
|
+
"adapter.logKimiAuthRequired": "Kimi \u304C\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u4E00\u5EA6 `kimi` \u3092\u5B9F\u884C\u3057\u3066 /login \u3092\u9001\u4FE1\u3059\u308B\uFF08\u307E\u305F\u306F API \u30AD\u30FC\u3092\u8A2D\u5B9A\u3059\u308B\uFF09\u3057\u3066\u304F\u3060\u3055\u3044 \u2014 {message}",
|
|
1785
|
+
"adapter.warnTraeCliMissing": 'TraeCode CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB "{bin}" \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\uFF08https://docs.trae.cn/cli_what-is-trae-cli\uFF09\u304B\u3001TUNNELBOX_TRAE_BIN \u306B\u30D1\u30B9\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044',
|
|
1786
|
+
"adapter.checkTraeHeader": "tunnelbox-trae \u74B0\u5883\u30C1\u30A7\u30C3\u30AF",
|
|
1787
|
+
"adapter.checkTraeCliMissing": "TraeCode CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF08{bin}\uFF09\u3002https://docs.trae.cn/cli_what-is-trae-cli \u304B\u3089\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
1788
|
+
"adapter.checkTraeAcpHint": "TraeCode CLI \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002ACP \u30E2\u30FC\u30C9\uFF08`traecli acp serve`\uFF09\u3067\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0/\u627F\u8A8D/\u9078\u629E\u304C\u5229\u7528\u3067\u304D\u307E\u3059",
|
|
1789
|
+
"adapter.errTraeAcpSpawn": "TraeCode `acp serve` \u306E\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {message}\uFF08TraeCode CLI \u304C ACP \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
1790
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP \u304C\u30BB\u30C3\u30B7\u30E7\u30F3 id \u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F",
|
|
1791
|
+
"adapter.traeSessionTitle": "Trae \u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
1792
|
+
"adapter.logTraeAuthSkipped": "TraeCode ACP \u8A8D\u8A3C\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3057\u305F\u3002`traecli login` \u3067\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\uFF08TraeCode CLI \u306F TRAE \u30A8\u30F3\u30BF\u30FC\u30D7\u30E9\u30A4\u30BA\u6700\u4E0A\u4F4D\u30D7\u30E9\u30F3\u9650\u5B9A\uFF09",
|
|
1793
|
+
"adapter.warnQoderCliMissing": 'Qoder CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB "{bin}" \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\uFF08npm i -g @qoder-ai/qodercli\uFF09\u304B\u3001TUNNELBOX_QODER_BIN \u306B\u30D1\u30B9\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044',
|
|
1794
|
+
"adapter.checkQoderHeader": "tunnelbox-qoder \u74B0\u5883\u30C1\u30A7\u30C3\u30AF",
|
|
1795
|
+
"adapter.checkQoderCliMissing": "Qoder CLI \u306E\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF08{bin}\uFF09\u3002\u6B21\u3067\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044: npm i -g @qoder-ai/qodercli",
|
|
1796
|
+
"adapter.checkQoderAcpHint": "Qoder CLI \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002ACP \u30E2\u30FC\u30C9\uFF08`qoder --acp`\uFF09\u3067\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0/\u627F\u8A8D/\u9078\u629E\u304C\u5229\u7528\u3067\u304D\u307E\u3059",
|
|
1797
|
+
"adapter.errQoderAcpSpawn": "Qoder `--acp` \u306E\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {message}\uFF08Qoder CLI \u304C `--acp` \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09",
|
|
1798
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP \u304C\u30BB\u30C3\u30B7\u30E7\u30F3 id \u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F",
|
|
1799
|
+
"adapter.qoderSessionTitle": "Qoder \u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
1800
|
+
"adapter.logQoderAuthSkipped": "Qoder ACP \u8A8D\u8A3C\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3057\u305F\u3002`qoder login` \u3067\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u304B\u3001QODER_PERSONAL_ACCESS_TOKEN \u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
|
|
1653
1801
|
};
|
|
1654
1802
|
|
|
1655
1803
|
// locales/ko-KR.json
|
|
@@ -1903,6 +2051,8 @@ var ko_KR_default = {
|
|
|
1903
2051
|
"adapter.logToolReason": "dsh\uAC00 \uB3C4\uAD6C {tool} \uC2E4\uD589\uC744 \uC694\uCCAD\uD569\uB2C8\uB2E4",
|
|
1904
2052
|
"adapter.logGatewayConnected": "\uB85C\uCEEC OpenClaw Gateway\uC5D0 \uC5F0\uACB0\uB428({version})",
|
|
1905
2053
|
"adapter.logGatewayDisconnected": "OpenClaw Gateway\uC640 \uC5F0\uACB0\uC774 \uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4. \uACF5\uC2DD \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uC7AC\uC5F0\uACB0 \uC911\u2026",
|
|
2054
|
+
"adapter.logSessionResync": "\uC138\uC158 {session}: agent \uC774\uBCA4\uD2B8 seq\uAC00 \uAC74\uB108\uB6F0\uC5B4 \uAE30\uB85D\uC744 \uB2E4\uC2DC \uBD88\uB7EC\uC635\uB2C8\uB2E4",
|
|
2055
|
+
"adapter.warnGatewayVersionBelowSupported": "OpenClaw Gateway {version}\uC774(\uAC00) \uCD5C\uC18C \uC9C0\uC6D0 \uBC84\uC804 {min}\uBCF4\uB2E4 \uB0AE\uC2B5\uB2C8\uB2E4. \uC77C\uBD80 \uAE30\uB2A5\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
|
|
1906
2056
|
"adapter.logGatewayConnectFailed": "\uB85C\uCEEC OpenClaw Gateway\uC5D0 \uC5F0\uACB0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4(\uAC8C\uC774\uD2B8\uC6E8\uC774 \uC778\uC99D \uD655\uC778: token \uB610\uB294 \uC7A5\uCE58 \uC2B9\uC778)",
|
|
1907
2057
|
"adapter.logGatewayCredentialSource": "{source}\uC5D0\uC11C OpenClaw Gateway \uC790\uACA9 \uC99D\uBA85\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4",
|
|
1908
2058
|
"adapter.logGatewayAutoStart": "\uB85C\uCEEC OpenClaw Gateway\uAC00 \uC2E4\uD589 \uC911\uC774 \uC544\uB2C8\uC5B4\uC11C \uC2DC\uC791\uD569\uB2C8\uB2E4(mode={mode})\u2026",
|
|
@@ -1923,6 +2073,7 @@ var ko_KR_default = {
|
|
|
1923
2073
|
"adapter.checkAuthStatusMissing": "\uC5C6\uC74C",
|
|
1924
2074
|
"adapter.checkAuthStatusUnparsable": "\uD30C\uC2F1 \uC2E4\uD328",
|
|
1925
2075
|
"adapter.checkAuthMode": "\uC778\uC99D \uBAA8\uB4DC: {mode}",
|
|
2076
|
+
"adapter.checkAuthExtraPaths": "\uCD94\uAC00 \uC790\uACA9 \uC99D\uBA85 \uD30C\uC77C: {paths}",
|
|
1926
2077
|
"adapter.checkAuthSource": "\uC790\uACA9 \uC99D\uBA85 \uCD9C\uCC98: {source}",
|
|
1927
2078
|
"adapter.checkAuthReachable": "\uAC8C\uC774\uD2B8\uC6E8\uC774 \uB3C4\uB2EC \uAC00\uB2A5: {value}",
|
|
1928
2079
|
"adapter.saveTokenPrompt": "OpenClaw Gateway \uD1A0\uD070\uC744 \uBD99\uC5EC\uB123\uACE0 Enter(`openclaw gateway auth-token --show`\uB85C \uD655\uC778):",
|
|
@@ -1954,6 +2105,7 @@ var ko_KR_default = {
|
|
|
1954
2105
|
"adapter.errAppServerExit": "codex app-server \uAC00 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB300\uAE30 \uC911\uC778 \uC2B9\uC778/\uC120\uD0DD\uC740 \uC790\uB3D9\uC73C\uB85C \uAC70\uBD80\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
1955
2106
|
"adapter.logUnsupportedServerRequest": "\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 app-server \uC694\uCCAD: {method}",
|
|
1956
2107
|
"adapter.logQuestionNative": "\uC120\uD0DD \uC694\uCCAD -> \uD734\uB300\uD3F0 \uC120\uD0DD \uCE74\uB4DC questionID={id} (session={session})",
|
|
2108
|
+
"adapter.logQuestionReplyFailed": "\uC9C8\uBB38 \uC751\uB2F5 \uC2E4\uD328({id}): {message}",
|
|
1957
2109
|
"adapter.logPermissionNative": "\uC2B9\uC778 \uC694\uCCAD -> \uD734\uB300\uD3F0 \uC2B9\uC778 \uCE74\uB4DC permissionID={id} (session={session})",
|
|
1958
2110
|
"adapter.checkAppServerOk": "codex app-server \uC0AC\uC6A9 \uAC00\uB2A5",
|
|
1959
2111
|
"adapter.checkAppServerMissing": "\uC774 Codex CLI \uB294 `codex app-server` \uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 (Codex CLI \uB97C \uC5C5\uADF8\uB808\uC774\uB4DC\uD558\uC138\uC694)",
|
|
@@ -2024,7 +2176,40 @@ var ko_KR_default = {
|
|
|
2024
2176
|
"hermes.logRegisterAskFailed": "tunnelbox: tunnelbox_ask \uB4F1\uB85D \uC2E4\uD328: {err}",
|
|
2025
2177
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: system prompt \uC139\uC158 \uB4F1\uB85D \uC2E4\uD328: {err}",
|
|
2026
2178
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: \uBC31\uADF8\uB77C\uC6B4\uB4DC \uBE0C\uB9AC\uC9C0 \uC2DC\uC791 \uC2E4\uD328: {err}",
|
|
2027
|
-
"hermes.systemPromptAsk": "\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uACB0\uC815/\uD655\uC778/\uC120\uD0DD\uC774 \uD544\uC694\uD558\uACE0 tunnelbox \uD734\uB300\uD3F0\uC774 \uC5F0\uACB0\uB418\uC5B4 \uC788\uC73C\uBA74 \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 `tunnelbox_ask` \uB3C4\uAD6C\uB85C \uD734\uB300\uD3F0\uC5D0\uC11C \uC9C8\uBB38\uD558\uC138\uC694. \uC0AC\uC6A9\uC790\uAC00 \uB2F5\uD560 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB9B0 \uD6C4 \uC9C4\uD589\uD558\uC138\uC694."
|
|
2179
|
+
"hermes.systemPromptAsk": "\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uACB0\uC815/\uD655\uC778/\uC120\uD0DD\uC774 \uD544\uC694\uD558\uACE0 tunnelbox \uD734\uB300\uD3F0\uC774 \uC5F0\uACB0\uB418\uC5B4 \uC788\uC73C\uBA74 \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 `tunnelbox_ask` \uB3C4\uAD6C\uB85C \uD734\uB300\uD3F0\uC5D0\uC11C \uC9C8\uBB38\uD558\uC138\uC694. \uC0AC\uC6A9\uC790\uAC00 \uB2F5\uD560 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB9B0 \uD6C4 \uC9C4\uD589\uD558\uC138\uC694.",
|
|
2180
|
+
"adapter.warnCodebuddyCliMissing": 'CodeBuddy CLI \uC2E4\uD589 \uD30C\uC77C "{bin}"\uC744(\uB97C) \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC124\uCE58\uD558\uAC70\uB098(npm i -g @tencent-ai/codebuddy-code) TUNNELBOX_CODEBUDDY_BIN\uC5D0 \uACBD\uB85C\uB97C \uC124\uC815\uD558\uC138\uC694',
|
|
2181
|
+
"adapter.checkCodebuddyHeader": "tunnelbox-codebuddy \uD658\uACBD \uC810\uAC80",
|
|
2182
|
+
"adapter.checkCodebuddyCliMissing": "CodeBuddy CLI \uC2E4\uD589 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4({bin}). \uB2E4\uC74C\uC73C\uB85C \uC124\uCE58\uD558\uC138\uC694: npm i -g @tencent-ai/codebuddy-code",
|
|
2183
|
+
"adapter.checkCodebuddyAcpHint": "CodeBuddy CLI\uB97C \uAC10\uC9C0\uD588\uC2B5\uB2C8\uB2E4. ACP \uBAA8\uB4DC(`codebuddy --acp`)\uC5D0\uC11C \uC2A4\uD2B8\uB9AC\uBC0D/\uC2B9\uC778/\uC120\uD0DD\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4",
|
|
2184
|
+
"adapter.errCodebuddyAcpSpawn": "CodeBuddy `--acp` \uC2DC\uC791 \uC2E4\uD328: {message} (CodeBuddy CLI\uAC00 `--acp`\uB97C \uC9C0\uC6D0\uD558\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694)",
|
|
2185
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP\uAC00 \uC138\uC158 id\uB97C \uBC18\uD658\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4",
|
|
2186
|
+
"adapter.codebuddySessionTitle": "CodeBuddy \uC138\uC158",
|
|
2187
|
+
"adapter.logElicitationNative": "\uC120\uD0DD/\uD655\uC778 \uC694\uCCAD -> \uD734\uB300\uD3F0 \uCE74\uB4DC id={id} (\uC138\uC158={session})",
|
|
2188
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy\uAC00 ACP\uB85C \uC778\uC99D\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. `codebuddy`\uB85C \uD55C \uBC88 \uB85C\uADF8\uC778\uD558\uAC70\uB098 CODEBUDDY_API_KEY\uB97C \uC124\uC815\uD558\uC138\uC694. \uB610\uB294 TUNNELBOX_CODEBUDDY_AUTH=<methodId>\uB85C ACP \uC778\uC99D\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4",
|
|
2189
|
+
"adapter.warnKimiCliMissing": 'Kimi CLI \uC2E4\uD589 \uD30C\uC77C "{bin}"\uC744(\uB97C) \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC124\uCE58\uD558\uAC70\uB098(https://moonshotai.github.io/kimi-code/) TUNNELBOX_KIMI_BIN\uC5D0 \uACBD\uB85C\uB97C \uC124\uC815\uD558\uC138\uC694',
|
|
2190
|
+
"adapter.checkKimiHeader": "tunnelbox-kimi \uD658\uACBD \uC810\uAC80",
|
|
2191
|
+
"adapter.checkKimiCliMissing": "Kimi CLI \uC2E4\uD589 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4({bin}). https://moonshotai.github.io/kimi-code/ \uC5D0\uC11C \uC124\uCE58\uD558\uC138\uC694",
|
|
2192
|
+
"adapter.checkKimiAcpHint": "Kimi CLI\uB97C \uAC10\uC9C0\uD588\uC2B5\uB2C8\uB2E4. ACP \uBAA8\uB4DC(`kimi acp`)\uC5D0\uC11C \uC2A4\uD2B8\uB9AC\uBC0D/\uC2B9\uC778/\uC120\uD0DD\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4",
|
|
2193
|
+
"adapter.errKimiAcpSpawn": "Kimi `acp` \uC2DC\uC791 \uC2E4\uD328: {message} (Kimi CLI\uAC00 `kimi acp`\uB97C \uC9C0\uC6D0\uD558\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694)",
|
|
2194
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP\uAC00 \uC138\uC158 id\uB97C \uBC18\uD658\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4",
|
|
2195
|
+
"adapter.kimiSessionTitle": "Kimi \uC138\uC158",
|
|
2196
|
+
"adapter.logKimiAuthRequired": "Kimi\uC5D0 \uB85C\uADF8\uC778\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. `kimi`\uB97C \uD55C \uBC88 \uC2E4\uD589\uD574 /login\uC744 \uBCF4\uB0B4\uAC70\uB098 API \uD0A4\uB97C \uC124\uC815\uD558\uC138\uC694 \u2014 {message}",
|
|
2197
|
+
"adapter.warnTraeCliMissing": 'TraeCode CLI \uC2E4\uD589 \uD30C\uC77C "{bin}"\uC744(\uB97C) \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC124\uCE58\uD558\uAC70\uB098(https://docs.trae.cn/cli_what-is-trae-cli) TUNNELBOX_TRAE_BIN\uC5D0 \uACBD\uB85C\uB97C \uC124\uC815\uD558\uC138\uC694',
|
|
2198
|
+
"adapter.checkTraeHeader": "tunnelbox-trae \uD658\uACBD \uC810\uAC80",
|
|
2199
|
+
"adapter.checkTraeCliMissing": "TraeCode CLI \uC2E4\uD589 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4({bin}). https://docs.trae.cn/cli_what-is-trae-cli \uC5D0\uC11C \uC124\uCE58\uD558\uC138\uC694",
|
|
2200
|
+
"adapter.checkTraeAcpHint": "TraeCode CLI\uB97C \uAC10\uC9C0\uD588\uC2B5\uB2C8\uB2E4. ACP \uBAA8\uB4DC(`traecli acp serve`)\uC5D0\uC11C \uC2A4\uD2B8\uB9AC\uBC0D/\uC2B9\uC778/\uC120\uD0DD\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4",
|
|
2201
|
+
"adapter.errTraeAcpSpawn": "TraeCode `acp serve` \uC2DC\uC791 \uC2E4\uD328: {message} (TraeCode CLI\uAC00 ACP\uB97C \uC9C0\uC6D0\uD558\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694)",
|
|
2202
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP\uAC00 \uC138\uC158 id\uB97C \uBC18\uD658\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4",
|
|
2203
|
+
"adapter.traeSessionTitle": "Trae \uC138\uC158",
|
|
2204
|
+
"adapter.logTraeAuthSkipped": "TraeCode ACP \uC778\uC99D\uC744 \uAC74\uB108\uB6F0\uC5C8\uC2B5\uB2C8\uB2E4. `traecli login`\uC73C\uB85C \uB85C\uADF8\uC778\uD558\uC138\uC694 (TraeCode CLI\uB294 TRAE \uC5D4\uD130\uD504\uB77C\uC774\uC988 \uD50C\uB798\uADF8\uC2ED \uD50C\uB79C \uC804\uC6A9)",
|
|
2205
|
+
"adapter.warnQoderCliMissing": 'Qoder CLI \uC2E4\uD589 \uD30C\uC77C "{bin}"\uC744(\uB97C) \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC124\uCE58\uD558\uAC70\uB098(npm i -g @qoder-ai/qodercli) TUNNELBOX_QODER_BIN\uC5D0 \uACBD\uB85C\uB97C \uC124\uC815\uD558\uC138\uC694',
|
|
2206
|
+
"adapter.checkQoderHeader": "tunnelbox-qoder \uD658\uACBD \uC810\uAC80",
|
|
2207
|
+
"adapter.checkQoderCliMissing": "Qoder CLI \uC2E4\uD589 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4({bin}). \uB2E4\uC74C\uC73C\uB85C \uC124\uCE58\uD558\uC138\uC694: npm i -g @qoder-ai/qodercli",
|
|
2208
|
+
"adapter.checkQoderAcpHint": "Qoder CLI\uB97C \uAC10\uC9C0\uD588\uC2B5\uB2C8\uB2E4. ACP \uBAA8\uB4DC(`qoder --acp`)\uC5D0\uC11C \uC2A4\uD2B8\uB9AC\uBC0D/\uC2B9\uC778/\uC120\uD0DD\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4",
|
|
2209
|
+
"adapter.errQoderAcpSpawn": "Qoder `--acp` \uC2DC\uC791 \uC2E4\uD328: {message} (Qoder CLI\uAC00 `--acp`\uB97C \uC9C0\uC6D0\uD558\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694)",
|
|
2210
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP\uAC00 \uC138\uC158 id\uB97C \uBC18\uD658\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4",
|
|
2211
|
+
"adapter.qoderSessionTitle": "Qoder \uC138\uC158",
|
|
2212
|
+
"adapter.logQoderAuthSkipped": "Qoder ACP \uC778\uC99D\uC744 \uAC74\uB108\uB6F0\uC5C8\uC2B5\uB2C8\uB2E4. `qoder login`\uC73C\uB85C \uB85C\uADF8\uC778\uD558\uAC70\uB098 QODER_PERSONAL_ACCESS_TOKEN\uC744 \uC124\uC815\uD558\uC138\uC694"
|
|
2028
2213
|
};
|
|
2029
2214
|
|
|
2030
2215
|
// locales/fr-FR.json
|
|
@@ -2278,6 +2463,8 @@ var fr_FR_default = {
|
|
|
2278
2463
|
"adapter.logToolReason": "dsh demande d'ex\xE9cuter l'outil {tool}",
|
|
2279
2464
|
"adapter.logGatewayConnected": "Connect\xE9 au Gateway OpenClaw local ({version})",
|
|
2280
2465
|
"adapter.logGatewayDisconnected": "D\xE9connect\xE9 du Gateway OpenClaw ; le client officiel se reconnecte\u2026",
|
|
2466
|
+
"adapter.logSessionResync": "Session {session} : saut de seq des \xE9v\xE9nements agent, rechargement de l'historique",
|
|
2467
|
+
"adapter.warnGatewayVersionBelowSupported": "Le Gateway OpenClaw {version} est inf\xE9rieur \xE0 la version minimale prise en charge {min} ; certaines fonctionnalit\xE9s peuvent \xEAtre indisponibles",
|
|
2281
2468
|
"adapter.logGatewayConnectFailed": "Impossible de se connecter au Gateway OpenClaw local (v\xE9rifiez l'authentification : token ou approbation de l'appareil)",
|
|
2282
2469
|
"adapter.logGatewayCredentialSource": "Utilisation des identifiants OpenClaw Gateway depuis {source}",
|
|
2283
2470
|
"adapter.logGatewayAutoStart": "Le Gateway OpenClaw local n'est pas d\xE9marr\xE9 ; d\xE9marrage (mode={mode})\u2026",
|
|
@@ -2298,6 +2485,7 @@ var fr_FR_default = {
|
|
|
2298
2485
|
"adapter.checkAuthStatusMissing": "absente",
|
|
2299
2486
|
"adapter.checkAuthStatusUnparsable": "illisible",
|
|
2300
2487
|
"adapter.checkAuthMode": "mode d'authentification : {mode}",
|
|
2488
|
+
"adapter.checkAuthExtraPaths": "fichiers d'identification suppl\xE9mentaires : {paths}",
|
|
2301
2489
|
"adapter.checkAuthSource": "source des identifiants : {source}",
|
|
2302
2490
|
"adapter.checkAuthReachable": "Gateway joignable : {value}",
|
|
2303
2491
|
"adapter.saveTokenPrompt": "Collez le token du Gateway OpenClaw (via `openclaw gateway auth-token --show`) puis Entr\xE9e :",
|
|
@@ -2329,6 +2517,7 @@ var fr_FR_default = {
|
|
|
2329
2517
|
"adapter.errAppServerExit": "codex app-server s'est arr\xEAt\xE9 ; les approbations/choix en attente ont \xE9t\xE9 refus\xE9s automatiquement",
|
|
2330
2518
|
"adapter.logUnsupportedServerRequest": "requ\xEAte app-server non prise en charge : {method}",
|
|
2331
2519
|
"adapter.logQuestionNative": "demande de choix -> carte de choix du t\xE9l\xE9phone questionID={id} (session={session})",
|
|
2520
|
+
"adapter.logQuestionReplyFailed": "\xC9chec de la r\xE9ponse \xE0 la question ({id}) : {message}",
|
|
2332
2521
|
"adapter.logPermissionNative": "demande d'approbation -> carte d'approbation du t\xE9l\xE9phone permissionID={id} (session={session})",
|
|
2333
2522
|
"adapter.checkAppServerOk": "codex app-server disponible",
|
|
2334
2523
|
"adapter.checkAppServerMissing": "ce Codex CLI ne prend pas en charge `codex app-server` (veuillez mettre \xE0 jour Codex CLI)",
|
|
@@ -2399,7 +2588,40 @@ var fr_FR_default = {
|
|
|
2399
2588
|
"hermes.logRegisterAskFailed": "tunnelbox : \xE9chec d'enregistrement de tunnelbox_ask : {err}",
|
|
2400
2589
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox : \xE9chec d'enregistrement de la section du prompt syst\xE8me : {err}",
|
|
2401
2590
|
"hermes.logBackgroundBridgeFailed": "tunnelbox : \xE9chec du d\xE9marrage du pont en arri\xE8re-plan : {err}",
|
|
2402
|
-
"hermes.systemPromptAsk": "Lorsque vous avez besoin d'une d\xE9cision, d'une clarification ou d'un choix de l'utilisateur et qu'un t\xE9l\xE9phone tunnelbox est associ\xE9, utilisez l'outil `tunnelbox_ask` pour poser la question sur son t\xE9l\xE9phone au lieu de deviner. Attendez sa r\xE9ponse avant de continuer."
|
|
2591
|
+
"hermes.systemPromptAsk": "Lorsque vous avez besoin d'une d\xE9cision, d'une clarification ou d'un choix de l'utilisateur et qu'un t\xE9l\xE9phone tunnelbox est associ\xE9, utilisez l'outil `tunnelbox_ask` pour poser la question sur son t\xE9l\xE9phone au lieu de deviner. Attendez sa r\xE9ponse avant de continuer.",
|
|
2592
|
+
"adapter.warnCodebuddyCliMissing": 'Ex\xE9cutable CodeBuddy CLI "{bin}" introuvable ; installez-le (npm i -g @tencent-ai/codebuddy-code) ou d\xE9finissez TUNNELBOX_CODEBUDDY_BIN sur son chemin',
|
|
2593
|
+
"adapter.checkCodebuddyHeader": "V\xE9rification de l'environnement tunnelbox-codebuddy",
|
|
2594
|
+
"adapter.checkCodebuddyCliMissing": "Ex\xE9cutable CodeBuddy CLI introuvable ({bin}) ; installez-le avec : npm i -g @tencent-ai/codebuddy-code",
|
|
2595
|
+
"adapter.checkCodebuddyAcpHint": "CodeBuddy CLI d\xE9tect\xE9 ; le mode ACP (`codebuddy --acp`) fournira le streaming/l'approbation/la s\xE9lection",
|
|
2596
|
+
"adapter.errCodebuddyAcpSpawn": "\xC9chec du d\xE9marrage de CodeBuddy `--acp` : {message} (v\xE9rifiez que le CodeBuddy CLI prend en charge `--acp`)",
|
|
2597
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP n'a pas renvoy\xE9 d'id de session",
|
|
2598
|
+
"adapter.codebuddySessionTitle": "Session CodeBuddy",
|
|
2599
|
+
"adapter.logElicitationNative": "Demande de s\xE9lection/confirmation -> carte t\xE9l\xE9phone id={id} (session={session})",
|
|
2600
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy n'est pas authentifi\xE9 via ACP ; connectez-vous une fois avec `codebuddy` (ou d\xE9finissez CODEBUDDY_API_KEY), ou d\xE9finissez TUNNELBOX_CODEBUDDY_AUTH=<methodId> pour vous authentifier via ACP",
|
|
2601
|
+
"adapter.warnKimiCliMissing": 'Ex\xE9cutable Kimi CLI "{bin}" introuvable ; installez-le (https://moonshotai.github.io/kimi-code/) ou d\xE9finissez TUNNELBOX_KIMI_BIN sur son chemin',
|
|
2602
|
+
"adapter.checkKimiHeader": "V\xE9rification de l'environnement tunnelbox-kimi",
|
|
2603
|
+
"adapter.checkKimiCliMissing": "Ex\xE9cutable Kimi CLI introuvable ({bin}) ; installez-le depuis https://moonshotai.github.io/kimi-code/",
|
|
2604
|
+
"adapter.checkKimiAcpHint": "Kimi CLI d\xE9tect\xE9 ; le mode ACP (`kimi acp`) fournira le streaming/l'approbation/la s\xE9lection",
|
|
2605
|
+
"adapter.errKimiAcpSpawn": "\xC9chec du d\xE9marrage de Kimi `acp` : {message} (v\xE9rifiez que le Kimi CLI prend en charge `kimi acp`)",
|
|
2606
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP n'a pas renvoy\xE9 d'id de session",
|
|
2607
|
+
"adapter.kimiSessionTitle": "Session Kimi",
|
|
2608
|
+
"adapter.logKimiAuthRequired": "Kimi n'est pas connect\xE9 : ex\xE9cutez `kimi` une fois et envoyez /login (ou configurez une cl\xE9 API) \u2014 {message}",
|
|
2609
|
+
"adapter.warnTraeCliMissing": 'Ex\xE9cutable TraeCode CLI "{bin}" introuvable ; installez-le (https://docs.trae.cn/cli_what-is-trae-cli) ou d\xE9finissez TUNNELBOX_TRAE_BIN sur son chemin',
|
|
2610
|
+
"adapter.checkTraeHeader": "V\xE9rification de l'environnement tunnelbox-trae",
|
|
2611
|
+
"adapter.checkTraeCliMissing": "Ex\xE9cutable TraeCode CLI introuvable ({bin}) ; installez-le depuis https://docs.trae.cn/cli_what-is-trae-cli",
|
|
2612
|
+
"adapter.checkTraeAcpHint": "TraeCode CLI d\xE9tect\xE9 ; le mode ACP (`traecli acp serve`) fournira le streaming/l'approbation/la s\xE9lection",
|
|
2613
|
+
"adapter.errTraeAcpSpawn": "\xC9chec du d\xE9marrage de TraeCode `acp serve` : {message} (v\xE9rifiez que le TraeCode CLI prend en charge ACP)",
|
|
2614
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP n'a pas renvoy\xE9 d'id de session",
|
|
2615
|
+
"adapter.traeSessionTitle": "Session Trae",
|
|
2616
|
+
"adapter.logTraeAuthSkipped": "Authentification ACP TraeCode ignor\xE9e ; connectez-vous avec `traecli login` (TraeCode CLI n\xE9cessite un forfait TRAE Enterprise Flagship)",
|
|
2617
|
+
"adapter.warnQoderCliMissing": 'Ex\xE9cutable Qoder CLI "{bin}" introuvable ; installez-le (npm i -g @qoder-ai/qodercli) ou d\xE9finissez TUNNELBOX_QODER_BIN sur son chemin',
|
|
2618
|
+
"adapter.checkQoderHeader": "V\xE9rification de l'environnement tunnelbox-qoder",
|
|
2619
|
+
"adapter.checkQoderCliMissing": "Ex\xE9cutable Qoder CLI introuvable ({bin}) ; installez-le avec : npm i -g @qoder-ai/qodercli",
|
|
2620
|
+
"adapter.checkQoderAcpHint": "Qoder CLI d\xE9tect\xE9 ; le mode ACP (`qoder --acp`) fournira le streaming/l'approbation/la s\xE9lection",
|
|
2621
|
+
"adapter.errQoderAcpSpawn": "\xC9chec du d\xE9marrage de Qoder `--acp` : {message} (v\xE9rifiez que le Qoder CLI prend en charge `--acp`)",
|
|
2622
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP n'a pas renvoy\xE9 d'id de session",
|
|
2623
|
+
"adapter.qoderSessionTitle": "Session Qoder",
|
|
2624
|
+
"adapter.logQoderAuthSkipped": "Authentification ACP Qoder ignor\xE9e ; connectez-vous avec `qoder login` ou d\xE9finissez QODER_PERSONAL_ACCESS_TOKEN"
|
|
2403
2625
|
};
|
|
2404
2626
|
|
|
2405
2627
|
// locales/de-DE.json
|
|
@@ -2653,6 +2875,8 @@ var de_DE_default = {
|
|
|
2653
2875
|
"adapter.logToolReason": "dsh fordert die Ausf\xFChrung des Tools {tool} an",
|
|
2654
2876
|
"adapter.logGatewayConnected": "Mit lokalem OpenClaw Gateway verbunden ({version})",
|
|
2655
2877
|
"adapter.logGatewayDisconnected": "Vom OpenClaw Gateway getrennt; der offizielle Client verbindet sich neu\u2026",
|
|
2878
|
+
"adapter.logSessionResync": "Sitzung {session}: agent-Event-seq-L\xFCcke, Verlauf wird neu geladen",
|
|
2879
|
+
"adapter.warnGatewayVersionBelowSupported": "OpenClaw Gateway {version} liegt unter der minimal unterst\xFCtzten Version {min}; einige Funktionen sind m\xF6glicherweise nicht verf\xFCgbar",
|
|
2656
2880
|
"adapter.logGatewayConnectFailed": "Verbindung zum lokalen OpenClaw Gateway nicht m\xF6glich (Gateway-Authentifizierung pr\xFCfen: Token oder Ger\xE4tefreigabe)",
|
|
2657
2881
|
"adapter.logGatewayCredentialSource": "OpenClaw-Gateway-Anmeldedaten aus {source} werden verwendet",
|
|
2658
2882
|
"adapter.logGatewayAutoStart": "Lokales OpenClaw Gateway l\xE4uft nicht; wird gestartet (mode={mode})\u2026",
|
|
@@ -2673,6 +2897,7 @@ var de_DE_default = {
|
|
|
2673
2897
|
"adapter.checkAuthStatusMissing": "fehlt",
|
|
2674
2898
|
"adapter.checkAuthStatusUnparsable": "nicht lesbar",
|
|
2675
2899
|
"adapter.checkAuthMode": "Auth-Modus: {mode}",
|
|
2900
|
+
"adapter.checkAuthExtraPaths": "zus\xE4tzliche Anmeldedateien: {paths}",
|
|
2676
2901
|
"adapter.checkAuthSource": "Quelle der Anmeldedaten: {source}",
|
|
2677
2902
|
"adapter.checkAuthReachable": "Gateway erreichbar: {value}",
|
|
2678
2903
|
"adapter.saveTokenPrompt": "OpenClaw-Gateway-Token einf\xFCgen (via `openclaw gateway auth-token --show`) und Enter dr\xFCcken:",
|
|
@@ -2704,6 +2929,7 @@ var de_DE_default = {
|
|
|
2704
2929
|
"adapter.errAppServerExit": "codex app-server wurde beendet; ausstehende Genehmigungen/Auswahlen wurden automatisch abgelehnt",
|
|
2705
2930
|
"adapter.logUnsupportedServerRequest": "nicht unterst\xFCtzte app-server-Anfrage: {method}",
|
|
2706
2931
|
"adapter.logQuestionNative": "Auswahlanfrage -> Auswahlkarte am Handy questionID={id} (session={session})",
|
|
2932
|
+
"adapter.logQuestionReplyFailed": "Antwort auf Frage fehlgeschlagen ({id}): {message}",
|
|
2707
2933
|
"adapter.logPermissionNative": "Genehmigungsanfrage -> Genehmigungskarte am Handy permissionID={id} (session={session})",
|
|
2708
2934
|
"adapter.checkAppServerOk": "codex app-server verf\xFCgbar",
|
|
2709
2935
|
"adapter.checkAppServerMissing": "diese Codex CLI unterst\xFCtzt `codex app-server` nicht (bitte Codex CLI aktualisieren)",
|
|
@@ -2774,7 +3000,40 @@ var de_DE_default = {
|
|
|
2774
3000
|
"hermes.logRegisterAskFailed": "tunnelbox: Registrierung von tunnelbox_ask fehlgeschlagen: {err}",
|
|
2775
3001
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: Registrierung des System-Prompt-Abschnitts fehlgeschlagen: {err}",
|
|
2776
3002
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: Start der Hintergrund-Bridge fehlgeschlagen: {err}",
|
|
2777
|
-
"hermes.systemPromptAsk": "Wenn Sie eine Entscheidung, Kl\xE4rung oder Auswahl vom Nutzer ben\xF6tigen und ein tunnelbox-Telefon verbunden ist, verwenden Sie das Tool `tunnelbox_ask`, um auf dessen Telefon zu fragen, statt zu raten. Warten Sie auf die Antwort, bevor Sie fortfahren."
|
|
3003
|
+
"hermes.systemPromptAsk": "Wenn Sie eine Entscheidung, Kl\xE4rung oder Auswahl vom Nutzer ben\xF6tigen und ein tunnelbox-Telefon verbunden ist, verwenden Sie das Tool `tunnelbox_ask`, um auf dessen Telefon zu fragen, statt zu raten. Warten Sie auf die Antwort, bevor Sie fortfahren.",
|
|
3004
|
+
"adapter.warnCodebuddyCliMissing": 'CodeBuddy-CLI-Programm "{bin}" nicht gefunden; installieren (npm i -g @tencent-ai/codebuddy-code) oder TUNNELBOX_CODEBUDDY_BIN auf den Pfad setzen',
|
|
3005
|
+
"adapter.checkCodebuddyHeader": "tunnelbox-codebuddy Umgebungspr\xFCfung",
|
|
3006
|
+
"adapter.checkCodebuddyCliMissing": "CodeBuddy-CLI-Programm nicht gefunden ({bin}); installieren mit: npm i -g @tencent-ai/codebuddy-code",
|
|
3007
|
+
"adapter.checkCodebuddyAcpHint": "CodeBuddy CLI erkannt; der ACP-Modus (`codebuddy --acp`) bietet Streaming/Freigabe/Auswahl",
|
|
3008
|
+
"adapter.errCodebuddyAcpSpawn": "Start von CodeBuddy `--acp` fehlgeschlagen: {message} (sicherstellen, dass die CodeBuddy CLI `--acp` unterst\xFCtzt)",
|
|
3009
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP hat keine Sitzungs-ID zur\xFCckgegeben",
|
|
3010
|
+
"adapter.codebuddySessionTitle": "CodeBuddy-Sitzung",
|
|
3011
|
+
"adapter.logElicitationNative": "Auswahl-/Best\xE4tigungsanfrage -> Telefonkarte id={id} (Sitzung={session})",
|
|
3012
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy ist nicht \xFCber ACP authentifiziert; melden Sie sich einmal mit `codebuddy` an (oder setzen Sie CODEBUDDY_API_KEY), oder setzen Sie TUNNELBOX_CODEBUDDY_AUTH=<methodId>, um \xFCber ACP zu authentifizieren",
|
|
3013
|
+
"adapter.warnKimiCliMissing": 'Kimi-CLI-Programm "{bin}" nicht gefunden; installieren (https://moonshotai.github.io/kimi-code/) oder TUNNELBOX_KIMI_BIN auf den Pfad setzen',
|
|
3014
|
+
"adapter.checkKimiHeader": "tunnelbox-kimi Umgebungspr\xFCfung",
|
|
3015
|
+
"adapter.checkKimiCliMissing": "Kimi-CLI-Programm nicht gefunden ({bin}); installieren von https://moonshotai.github.io/kimi-code/",
|
|
3016
|
+
"adapter.checkKimiAcpHint": "Kimi CLI erkannt; der ACP-Modus (`kimi acp`) bietet Streaming/Freigabe/Auswahl",
|
|
3017
|
+
"adapter.errKimiAcpSpawn": "Start von Kimi `acp` fehlgeschlagen: {message} (sicherstellen, dass die Kimi CLI `kimi acp` unterst\xFCtzt)",
|
|
3018
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP hat keine Sitzungs-ID zur\xFCckgegeben",
|
|
3019
|
+
"adapter.kimiSessionTitle": "Kimi-Sitzung",
|
|
3020
|
+
"adapter.logKimiAuthRequired": "Kimi ist nicht angemeldet: `kimi` einmal ausf\xFChren und /login senden (oder einen API-Schl\xFCssel konfigurieren) \u2014 {message}",
|
|
3021
|
+
"adapter.warnTraeCliMissing": 'TraeCode-CLI-Programm "{bin}" nicht gefunden; installieren (https://docs.trae.cn/cli_what-is-trae-cli) oder TUNNELBOX_TRAE_BIN auf den Pfad setzen',
|
|
3022
|
+
"adapter.checkTraeHeader": "tunnelbox-trae Umgebungspr\xFCfung",
|
|
3023
|
+
"adapter.checkTraeCliMissing": "TraeCode-CLI-Programm nicht gefunden ({bin}); installieren von https://docs.trae.cn/cli_what-is-trae-cli",
|
|
3024
|
+
"adapter.checkTraeAcpHint": "TraeCode CLI erkannt; der ACP-Modus (`traecli acp serve`) bietet Streaming/Freigabe/Auswahl",
|
|
3025
|
+
"adapter.errTraeAcpSpawn": "Start von TraeCode `acp serve` fehlgeschlagen: {message} (sicherstellen, dass die TraeCode CLI ACP unterst\xFCtzt)",
|
|
3026
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP hat keine Sitzungs-ID zur\xFCckgegeben",
|
|
3027
|
+
"adapter.traeSessionTitle": "Trae-Sitzung",
|
|
3028
|
+
"adapter.logTraeAuthSkipped": "TraeCode ACP-Authentifizierung \xFCbersprungen; melden Sie sich mit `traecli login` an (TraeCode CLI erfordert einen TRAE Enterprise Flagship-Plan)",
|
|
3029
|
+
"adapter.warnQoderCliMissing": 'Qoder-CLI-Programm "{bin}" nicht gefunden; installieren (npm i -g @qoder-ai/qodercli) oder TUNNELBOX_QODER_BIN auf den Pfad setzen',
|
|
3030
|
+
"adapter.checkQoderHeader": "tunnelbox-qoder Umgebungspr\xFCfung",
|
|
3031
|
+
"adapter.checkQoderCliMissing": "Qoder-CLI-Programm nicht gefunden ({bin}); installieren mit: npm i -g @qoder-ai/qodercli",
|
|
3032
|
+
"adapter.checkQoderAcpHint": "Qoder CLI erkannt; der ACP-Modus (`qoder --acp`) bietet Streaming/Freigabe/Auswahl",
|
|
3033
|
+
"adapter.errQoderAcpSpawn": "Start von Qoder `--acp` fehlgeschlagen: {message} (sicherstellen, dass die Qoder CLI `--acp` unterst\xFCtzt)",
|
|
3034
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP hat keine Sitzungs-ID zur\xFCckgegeben",
|
|
3035
|
+
"adapter.qoderSessionTitle": "Qoder-Sitzung",
|
|
3036
|
+
"adapter.logQoderAuthSkipped": "Qoder ACP-Authentifizierung \xFCbersprungen; melden Sie sich mit `qoder login` an oder setzen Sie QODER_PERSONAL_ACCESS_TOKEN"
|
|
2778
3037
|
};
|
|
2779
3038
|
|
|
2780
3039
|
// locales/es-ES.json
|
|
@@ -3028,6 +3287,8 @@ var es_ES_default = {
|
|
|
3028
3287
|
"adapter.logToolReason": "dsh solicita ejecutar la herramienta {tool}",
|
|
3029
3288
|
"adapter.logGatewayConnected": "Conectado al Gateway OpenClaw local ({version})",
|
|
3030
3289
|
"adapter.logGatewayDisconnected": "Desconectado del Gateway OpenClaw; el cliente oficial se est\xE1 reconectando\u2026",
|
|
3290
|
+
"adapter.logSessionResync": "Sesi\xF3n {session}: salto de seq en eventos agent, recargando el historial",
|
|
3291
|
+
"adapter.warnGatewayVersionBelowSupported": "El Gateway OpenClaw {version} es inferior a la versi\xF3n m\xEDnima admitida {min}; algunas funciones pueden no estar disponibles",
|
|
3031
3292
|
"adapter.logGatewayConnectFailed": "No se puede conectar al Gateway OpenClaw local (revisa la autenticaci\xF3n: token o aprobaci\xF3n del dispositivo)",
|
|
3032
3293
|
"adapter.logGatewayCredentialSource": "Usando credenciales de OpenClaw Gateway desde {source}",
|
|
3033
3294
|
"adapter.logGatewayAutoStart": "El Gateway OpenClaw local no est\xE1 en ejecuci\xF3n; inici\xE1ndolo (mode={mode})\u2026",
|
|
@@ -3048,6 +3309,7 @@ var es_ES_default = {
|
|
|
3048
3309
|
"adapter.checkAuthStatusMissing": "ausente",
|
|
3049
3310
|
"adapter.checkAuthStatusUnparsable": "ilegible",
|
|
3050
3311
|
"adapter.checkAuthMode": "modo de autenticaci\xF3n: {mode}",
|
|
3312
|
+
"adapter.checkAuthExtraPaths": "archivos de credenciales adicionales: {paths}",
|
|
3051
3313
|
"adapter.checkAuthSource": "origen de credenciales: {source}",
|
|
3052
3314
|
"adapter.checkAuthReachable": "Gateway accesible: {value}",
|
|
3053
3315
|
"adapter.saveTokenPrompt": "Pega el token del Gateway OpenClaw (con `openclaw gateway auth-token --show`) y pulsa Enter:",
|
|
@@ -3079,6 +3341,7 @@ var es_ES_default = {
|
|
|
3079
3341
|
"adapter.errAppServerExit": "codex app-server se cerr\xF3; las aprobaciones/elecciones pendientes se rechazaron autom\xE1ticamente",
|
|
3080
3342
|
"adapter.logUnsupportedServerRequest": "solicitud de app-server no admitida: {method}",
|
|
3081
3343
|
"adapter.logQuestionNative": "solicitud de elecci\xF3n -> tarjeta de elecci\xF3n del tel\xE9fono questionID={id} (session={session})",
|
|
3344
|
+
"adapter.logQuestionReplyFailed": "Error al responder la pregunta ({id}): {message}",
|
|
3082
3345
|
"adapter.logPermissionNative": "solicitud de aprobaci\xF3n -> tarjeta de aprobaci\xF3n del tel\xE9fono permissionID={id} (session={session})",
|
|
3083
3346
|
"adapter.checkAppServerOk": "codex app-server disponible",
|
|
3084
3347
|
"adapter.checkAppServerMissing": "este Codex CLI no admite `codex app-server` (actualiza Codex CLI)",
|
|
@@ -3149,7 +3412,40 @@ var es_ES_default = {
|
|
|
3149
3412
|
"hermes.logRegisterAskFailed": "tunnelbox: fall\xF3 el registro de tunnelbox_ask: {err}",
|
|
3150
3413
|
"hermes.logRegisterSystemPromptFailed": "tunnelbox: fall\xF3 el registro de la secci\xF3n del prompt del sistema: {err}",
|
|
3151
3414
|
"hermes.logBackgroundBridgeFailed": "tunnelbox: fall\xF3 el inicio del puente en segundo plano: {err}",
|
|
3152
|
-
"hermes.systemPromptAsk": "Cuando necesites una decisi\xF3n, aclaraci\xF3n o elecci\xF3n del usuario y haya un tel\xE9fono tunnelbox vinculado, usa la herramienta `tunnelbox_ask` para preguntar en su tel\xE9fono en lugar de adivinar. Espera su respuesta antes de continuar."
|
|
3415
|
+
"hermes.systemPromptAsk": "Cuando necesites una decisi\xF3n, aclaraci\xF3n o elecci\xF3n del usuario y haya un tel\xE9fono tunnelbox vinculado, usa la herramienta `tunnelbox_ask` para preguntar en su tel\xE9fono en lugar de adivinar. Espera su respuesta antes de continuar.",
|
|
3416
|
+
"adapter.warnCodebuddyCliMissing": 'No se encontr\xF3 el ejecutable de CodeBuddy CLI "{bin}"; inst\xE1lalo (npm i -g @tencent-ai/codebuddy-code) o define TUNNELBOX_CODEBUDDY_BIN con su ruta',
|
|
3417
|
+
"adapter.checkCodebuddyHeader": "Comprobaci\xF3n de entorno de tunnelbox-codebuddy",
|
|
3418
|
+
"adapter.checkCodebuddyCliMissing": "No se encontr\xF3 el ejecutable de CodeBuddy CLI ({bin}); inst\xE1lalo con: npm i -g @tencent-ai/codebuddy-code",
|
|
3419
|
+
"adapter.checkCodebuddyAcpHint": "CodeBuddy CLI detectado; el modo ACP (`codebuddy --acp`) proporcionar\xE1 streaming/aprobaci\xF3n/selecci\xF3n",
|
|
3420
|
+
"adapter.errCodebuddyAcpSpawn": "No se pudo iniciar CodeBuddy `--acp`: {message} (aseg\xFArate de que CodeBuddy CLI admite `--acp`)",
|
|
3421
|
+
"adapter.errCodebuddyAcpNoSession": "CodeBuddy ACP no devolvi\xF3 un id de sesi\xF3n",
|
|
3422
|
+
"adapter.codebuddySessionTitle": "Sesi\xF3n de CodeBuddy",
|
|
3423
|
+
"adapter.logElicitationNative": "Solicitud de selecci\xF3n/confirmaci\xF3n -> tarjeta del tel\xE9fono id={id} (sesi\xF3n={session})",
|
|
3424
|
+
"adapter.logCodebuddyAuthSkipped": "CodeBuddy no est\xE1 autenticado por ACP; inicia sesi\xF3n una vez con `codebuddy` (o define CODEBUDDY_API_KEY), o define TUNNELBOX_CODEBUDDY_AUTH=<methodId> para autenticarte por ACP",
|
|
3425
|
+
"adapter.warnKimiCliMissing": 'No se encontr\xF3 el ejecutable de Kimi CLI "{bin}"; inst\xE1lalo (https://moonshotai.github.io/kimi-code/) o define TUNNELBOX_KIMI_BIN con su ruta',
|
|
3426
|
+
"adapter.checkKimiHeader": "Comprobaci\xF3n de entorno de tunnelbox-kimi",
|
|
3427
|
+
"adapter.checkKimiCliMissing": "No se encontr\xF3 el ejecutable de Kimi CLI ({bin}); inst\xE1lalo desde https://moonshotai.github.io/kimi-code/",
|
|
3428
|
+
"adapter.checkKimiAcpHint": "Kimi CLI detectado; el modo ACP (`kimi acp`) proporcionar\xE1 streaming/aprobaci\xF3n/selecci\xF3n",
|
|
3429
|
+
"adapter.errKimiAcpSpawn": "No se pudo iniciar Kimi `acp`: {message} (aseg\xFArate de que Kimi CLI admite `kimi acp`)",
|
|
3430
|
+
"adapter.errKimiAcpNoSession": "Kimi ACP no devolvi\xF3 un id de sesi\xF3n",
|
|
3431
|
+
"adapter.kimiSessionTitle": "Sesi\xF3n de Kimi",
|
|
3432
|
+
"adapter.logKimiAuthRequired": "Kimi no ha iniciado sesi\xF3n: ejecuta `kimi` una vez y env\xEDa /login (o configura una clave API) \u2014 {message}",
|
|
3433
|
+
"adapter.warnTraeCliMissing": 'No se encontr\xF3 el ejecutable de TraeCode CLI "{bin}"; inst\xE1lalo (https://docs.trae.cn/cli_what-is-trae-cli) o define TUNNELBOX_TRAE_BIN con su ruta',
|
|
3434
|
+
"adapter.checkTraeHeader": "Comprobaci\xF3n de entorno de tunnelbox-trae",
|
|
3435
|
+
"adapter.checkTraeCliMissing": "No se encontr\xF3 el ejecutable de TraeCode CLI ({bin}); inst\xE1lalo desde https://docs.trae.cn/cli_what-is-trae-cli",
|
|
3436
|
+
"adapter.checkTraeAcpHint": "TraeCode CLI detectado; el modo ACP (`traecli acp serve`) proporcionar\xE1 streaming/aprobaci\xF3n/selecci\xF3n",
|
|
3437
|
+
"adapter.errTraeAcpSpawn": "No se pudo iniciar TraeCode `acp serve`: {message} (aseg\xFArate de que TraeCode CLI admite ACP)",
|
|
3438
|
+
"adapter.errTraeAcpNoSession": "TraeCode ACP no devolvi\xF3 un id de sesi\xF3n",
|
|
3439
|
+
"adapter.traeSessionTitle": "Sesi\xF3n de Trae",
|
|
3440
|
+
"adapter.logTraeAuthSkipped": "Se omiti\xF3 la autenticaci\xF3n ACP de TraeCode; inicia sesi\xF3n con `traecli login` (TraeCode CLI requiere un plan TRAE Enterprise Flagship)",
|
|
3441
|
+
"adapter.warnQoderCliMissing": 'No se encontr\xF3 el ejecutable de Qoder CLI "{bin}"; inst\xE1lalo (npm i -g @qoder-ai/qodercli) o define TUNNELBOX_QODER_BIN con su ruta',
|
|
3442
|
+
"adapter.checkQoderHeader": "Comprobaci\xF3n de entorno de tunnelbox-qoder",
|
|
3443
|
+
"adapter.checkQoderCliMissing": "No se encontr\xF3 el ejecutable de Qoder CLI ({bin}); inst\xE1lalo con: npm i -g @qoder-ai/qodercli",
|
|
3444
|
+
"adapter.checkQoderAcpHint": "Qoder CLI detectado; el modo ACP (`qoder --acp`) proporcionar\xE1 streaming/aprobaci\xF3n/selecci\xF3n",
|
|
3445
|
+
"adapter.errQoderAcpSpawn": "No se pudo iniciar Qoder `--acp`: {message} (aseg\xFArate de que Qoder CLI admite `--acp`)",
|
|
3446
|
+
"adapter.errQoderAcpNoSession": "Qoder ACP no devolvi\xF3 un id de sesi\xF3n",
|
|
3447
|
+
"adapter.qoderSessionTitle": "Sesi\xF3n de Qoder",
|
|
3448
|
+
"adapter.logQoderAuthSkipped": "Se omiti\xF3 la autenticaci\xF3n ACP de Qoder; inicia sesi\xF3n con `qoder login` o define QODER_PERSONAL_ACCESS_TOKEN"
|
|
3153
3449
|
};
|
|
3154
3450
|
|
|
3155
3451
|
// src/i18n.ts
|
|
@@ -3583,7 +3879,458 @@ function killCliTree(child) {
|
|
|
3583
3879
|
}
|
|
3584
3880
|
}, 1500);
|
|
3585
3881
|
}
|
|
3882
|
+
|
|
3883
|
+
// src/acp/client.ts
|
|
3884
|
+
import { spawn } from "child_process";
|
|
3885
|
+
var DEFAULT_REQUEST_TIMEOUT_MS = 3e4;
|
|
3886
|
+
var AcpClient = class {
|
|
3887
|
+
constructor(bin, args = [], handlers = {}, label = "acp") {
|
|
3888
|
+
this.bin = bin;
|
|
3889
|
+
this.args = args;
|
|
3890
|
+
this.handlers = handlers;
|
|
3891
|
+
this.label = label;
|
|
3892
|
+
}
|
|
3893
|
+
child = null;
|
|
3894
|
+
buf = "";
|
|
3895
|
+
seq = 0;
|
|
3896
|
+
pending = /* @__PURE__ */ new Map();
|
|
3897
|
+
exited = false;
|
|
3898
|
+
get alive() {
|
|
3899
|
+
return !!this.child && !this.exited;
|
|
3900
|
+
}
|
|
3901
|
+
/** 启动 ACP 子进程(stdio 传输)。 */
|
|
3902
|
+
start(cwd) {
|
|
3903
|
+
return new Promise((resolve2, reject) => {
|
|
3904
|
+
const resolved = resolveCliBinary(this.bin);
|
|
3905
|
+
const opts = { cwd, env: process.env, stdio: ["pipe", "pipe", "pipe"] };
|
|
3906
|
+
let child;
|
|
3907
|
+
try {
|
|
3908
|
+
child = resolved?.viaShell ? spawn(cmdLineFor(resolved.path, this.args), [], { ...opts, shell: true }) : spawn(resolved?.path ?? this.bin, this.args, opts);
|
|
3909
|
+
} catch (e) {
|
|
3910
|
+
reject(e);
|
|
3911
|
+
return;
|
|
3912
|
+
}
|
|
3913
|
+
this.child = child;
|
|
3914
|
+
this.exited = false;
|
|
3915
|
+
child.stdout?.setEncoding("utf8");
|
|
3916
|
+
child.stdout?.on("data", (chunk) => this.onChunk(chunk));
|
|
3917
|
+
child.stderr?.setEncoding("utf8");
|
|
3918
|
+
child.stderr?.on("data", (chunk) => {
|
|
3919
|
+
for (const l of chunk.split("\n")) {
|
|
3920
|
+
const s = l.trim();
|
|
3921
|
+
if (s) this.handlers.onStderr?.(s);
|
|
3922
|
+
}
|
|
3923
|
+
});
|
|
3924
|
+
child.on("error", (e) => {
|
|
3925
|
+
this.failAll(e);
|
|
3926
|
+
reject(e);
|
|
3927
|
+
});
|
|
3928
|
+
child.on("close", (code, signal) => {
|
|
3929
|
+
this.exited = true;
|
|
3930
|
+
this.child = null;
|
|
3931
|
+
this.failAll(new Error(`${this.label} exited (code=${code ?? "null"} signal=${signal ?? "null"})`));
|
|
3932
|
+
this.handlers.onExit?.(code, signal);
|
|
3933
|
+
});
|
|
3934
|
+
resolve2();
|
|
3935
|
+
});
|
|
3936
|
+
}
|
|
3937
|
+
/**
|
|
3938
|
+
* 发送请求并等待响应。`timeoutMs <= 0` 表示不设超时(如 `session/prompt` 持续整轮)。
|
|
3939
|
+
*/
|
|
3940
|
+
request(method, params, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
|
|
3941
|
+
if (!this.alive) return Promise.reject(new Error(`${this.label} not running`));
|
|
3942
|
+
const id = ++this.seq;
|
|
3943
|
+
return new Promise((resolve2, reject) => {
|
|
3944
|
+
const timer = timeoutMs > 0 ? setTimeout(() => {
|
|
3945
|
+
this.pending.delete(id);
|
|
3946
|
+
reject(new Error(`${this.label} request timeout: ${method}`));
|
|
3947
|
+
}, timeoutMs) : null;
|
|
3948
|
+
this.pending.set(id, { resolve: resolve2, reject, timer });
|
|
3949
|
+
this.write({ jsonrpc: "2.0", id, method, ...params === void 0 ? {} : { params } });
|
|
3950
|
+
});
|
|
3951
|
+
}
|
|
3952
|
+
/** 应答服务端请求(成功)。 */
|
|
3953
|
+
respond(id, result) {
|
|
3954
|
+
this.write({ jsonrpc: "2.0", id, result });
|
|
3955
|
+
}
|
|
3956
|
+
/** 应答服务端请求(失败)。 */
|
|
3957
|
+
respondError(id, code, message) {
|
|
3958
|
+
this.write({ jsonrpc: "2.0", id, error: { code, message } });
|
|
3959
|
+
}
|
|
3960
|
+
/** 发送通知。 */
|
|
3961
|
+
notify(method, params) {
|
|
3962
|
+
this.write({ jsonrpc: "2.0", method, ...params === void 0 ? {} : { params } });
|
|
3963
|
+
}
|
|
3964
|
+
stop() {
|
|
3965
|
+
this.exited = true;
|
|
3966
|
+
this.failAll(new Error(`${this.label} client stopped`));
|
|
3967
|
+
try {
|
|
3968
|
+
this.child?.kill();
|
|
3969
|
+
} catch {
|
|
3970
|
+
}
|
|
3971
|
+
this.child = null;
|
|
3972
|
+
}
|
|
3973
|
+
write(obj) {
|
|
3974
|
+
try {
|
|
3975
|
+
this.child?.stdin?.write(JSON.stringify(obj) + "\n");
|
|
3976
|
+
} catch {
|
|
3977
|
+
}
|
|
3978
|
+
}
|
|
3979
|
+
onChunk(chunk) {
|
|
3980
|
+
this.buf += chunk;
|
|
3981
|
+
let idx;
|
|
3982
|
+
while ((idx = this.buf.indexOf("\n")) >= 0) {
|
|
3983
|
+
const line = this.buf.slice(0, idx).trim();
|
|
3984
|
+
this.buf = this.buf.slice(idx + 1);
|
|
3985
|
+
if (line) this.onLine(line);
|
|
3986
|
+
}
|
|
3987
|
+
}
|
|
3988
|
+
onLine(line) {
|
|
3989
|
+
let msg;
|
|
3990
|
+
try {
|
|
3991
|
+
msg = JSON.parse(line);
|
|
3992
|
+
} catch {
|
|
3993
|
+
this.handlers.onStderr?.(`non-json line: ${line.slice(0, 200)}`);
|
|
3994
|
+
return;
|
|
3995
|
+
}
|
|
3996
|
+
const method = typeof msg.method === "string" ? msg.method : "";
|
|
3997
|
+
const id = msg.id;
|
|
3998
|
+
if (method && id !== void 0) {
|
|
3999
|
+
this.handlers.onServerRequest?.(id, method, msg.params);
|
|
4000
|
+
return;
|
|
4001
|
+
}
|
|
4002
|
+
if (method) {
|
|
4003
|
+
this.handlers.onNotification?.(method, msg.params);
|
|
4004
|
+
return;
|
|
4005
|
+
}
|
|
4006
|
+
if (id === void 0) return;
|
|
4007
|
+
const p = this.pending.get(id);
|
|
4008
|
+
if (!p) return;
|
|
4009
|
+
this.pending.delete(id);
|
|
4010
|
+
if (p.timer) clearTimeout(p.timer);
|
|
4011
|
+
if (msg.error) {
|
|
4012
|
+
const err = msg.error;
|
|
4013
|
+
p.reject(new Error(`${err?.message || `${this.label} error`}${err?.code !== void 0 ? ` (${err.code})` : ""}`));
|
|
4014
|
+
} else {
|
|
4015
|
+
p.resolve(msg.result);
|
|
4016
|
+
}
|
|
4017
|
+
}
|
|
4018
|
+
failAll(e) {
|
|
4019
|
+
for (const p of this.pending.values()) {
|
|
4020
|
+
if (p.timer) clearTimeout(p.timer);
|
|
4021
|
+
p.reject(e);
|
|
4022
|
+
}
|
|
4023
|
+
this.pending.clear();
|
|
4024
|
+
}
|
|
4025
|
+
};
|
|
4026
|
+
|
|
4027
|
+
// src/acp/map.ts
|
|
4028
|
+
function textOf(content) {
|
|
4029
|
+
if (content && typeof content === "object" && content.type === "text") {
|
|
4030
|
+
return String(content.text ?? "");
|
|
4031
|
+
}
|
|
4032
|
+
return "";
|
|
4033
|
+
}
|
|
4034
|
+
function safeJson(v) {
|
|
4035
|
+
if (v === void 0 || v === null) return "";
|
|
4036
|
+
try {
|
|
4037
|
+
return typeof v === "string" ? v : JSON.stringify(v, null, 2);
|
|
4038
|
+
} catch {
|
|
4039
|
+
return String(v);
|
|
4040
|
+
}
|
|
4041
|
+
}
|
|
4042
|
+
function toolPart(tc, complete) {
|
|
4043
|
+
const name = tc.title || tc.kind || "tool";
|
|
4044
|
+
return { id: tc.toolCallId, type: "tool", tool: name, args: safeJson(tc.rawInput), complete };
|
|
4045
|
+
}
|
|
4046
|
+
function planText(entries) {
|
|
4047
|
+
if (!Array.isArray(entries)) return "";
|
|
4048
|
+
return entries.map((e) => {
|
|
4049
|
+
const mark = e.status === "completed" ? "x" : e.status === "in_progress" ? "~" : " ";
|
|
4050
|
+
return `- [${mark}] ${e.content ?? ""}`.trim();
|
|
4051
|
+
}).filter(Boolean).join("\n");
|
|
4052
|
+
}
|
|
4053
|
+
function partMessage(id, role, part, created = Date.now()) {
|
|
4054
|
+
return { id, role, parts: [part], created };
|
|
4055
|
+
}
|
|
4056
|
+
|
|
4057
|
+
// src/acp/supervisor.ts
|
|
4058
|
+
var PROTOCOL_VERSION = 1;
|
|
4059
|
+
var AcpSupervisor = class {
|
|
4060
|
+
constructor(cfg) {
|
|
4061
|
+
this.cfg = cfg;
|
|
4062
|
+
}
|
|
4063
|
+
client = null;
|
|
4064
|
+
starting = null;
|
|
4065
|
+
caps = {};
|
|
4066
|
+
auth = null;
|
|
4067
|
+
/** 由适配器注入:通知 / 服务端请求处理。 */
|
|
4068
|
+
onNotification = () => {
|
|
4069
|
+
};
|
|
4070
|
+
onServerRequest = () => {
|
|
4071
|
+
};
|
|
4072
|
+
get running() {
|
|
4073
|
+
return !!this.client?.alive;
|
|
4074
|
+
}
|
|
4075
|
+
/** 当前客户端(不触发启动);用于应答来自该连接的服务端请求。 */
|
|
4076
|
+
get current() {
|
|
4077
|
+
return this.client?.alive ? this.client : null;
|
|
4078
|
+
}
|
|
4079
|
+
/** initialize 协商得到的 agent 能力位(loadSession / sessionCapabilities 等)。 */
|
|
4080
|
+
get capabilities() {
|
|
4081
|
+
return this.caps;
|
|
4082
|
+
}
|
|
4083
|
+
/** `authenticate` 返回结果(未认证/未调用时为 null)。 */
|
|
4084
|
+
get authResult() {
|
|
4085
|
+
return this.auth;
|
|
4086
|
+
}
|
|
4087
|
+
/** 取得可用客户端(必要时启动并握手)。 */
|
|
4088
|
+
async ensure() {
|
|
4089
|
+
if (this.client?.alive) return this.client;
|
|
4090
|
+
if (!this.starting) {
|
|
4091
|
+
this.starting = this.launch().finally(() => {
|
|
4092
|
+
this.starting = null;
|
|
4093
|
+
});
|
|
4094
|
+
}
|
|
4095
|
+
return this.starting;
|
|
4096
|
+
}
|
|
4097
|
+
stop() {
|
|
4098
|
+
this.client?.stop();
|
|
4099
|
+
this.client = null;
|
|
4100
|
+
this.caps = {};
|
|
4101
|
+
this.auth = null;
|
|
4102
|
+
}
|
|
4103
|
+
async launch() {
|
|
4104
|
+
const handlers = {
|
|
4105
|
+
onNotification: (method, params2) => this.onNotification(method, params2),
|
|
4106
|
+
onServerRequest: (id, method, params2) => this.onServerRequest(id, method, params2),
|
|
4107
|
+
onStderr: (line) => {
|
|
4108
|
+
if (/\b(error|failed|panic|denied|unauthorized|auth|login|mcp|tunnelbox)\b/i.test(line)) {
|
|
4109
|
+
this.cfg.log(`acp: ${line.slice(0, 300)}`);
|
|
4110
|
+
}
|
|
4111
|
+
},
|
|
4112
|
+
onExit: (code, signal) => {
|
|
4113
|
+
this.client = null;
|
|
4114
|
+
this.caps = {};
|
|
4115
|
+
this.auth = null;
|
|
4116
|
+
this.cfg.log(`${this.cfg.label} exited (code=${code ?? "null"} signal=${signal ?? "null"})`);
|
|
4117
|
+
this.cfg.onExit?.(code, signal);
|
|
4118
|
+
}
|
|
4119
|
+
};
|
|
4120
|
+
const client = new AcpClient(this.cfg.bin, this.cfg.args, handlers, this.cfg.label);
|
|
4121
|
+
await client.start(this.cfg.cwd);
|
|
4122
|
+
const params = {
|
|
4123
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
4124
|
+
clientCapabilities: this.cfg.clientCapabilities ?? {
|
|
4125
|
+
// 不代理文件/终端工具(适配器只做远程 UI;工具在本机执行)
|
|
4126
|
+
fs: { readTextFile: false, writeTextFile: false },
|
|
4127
|
+
terminal: false,
|
|
4128
|
+
// 声明 form 后支持 elicitation 的 agent 才会下发 elicitation/create
|
|
4129
|
+
elicitation: { form: {} }
|
|
4130
|
+
},
|
|
4131
|
+
clientInfo: this.cfg.clientInfo
|
|
4132
|
+
};
|
|
4133
|
+
const res = await client.request("initialize", params, 2e4);
|
|
4134
|
+
this.caps = res?.agentCapabilities ?? {};
|
|
4135
|
+
await this.authenticate(client, res?.authMethods);
|
|
4136
|
+
this.client = client;
|
|
4137
|
+
return client;
|
|
4138
|
+
}
|
|
4139
|
+
/**
|
|
4140
|
+
* 完成登录握手。仅当配置了 `authMethod` 时调用(交互式登录的 agent 应缺省不调用,避免挂起/弹登录);
|
|
4141
|
+
* 非交互的 agent(如 Kimi `login`)可传入以探测登录态,失败不阻断启动。
|
|
4142
|
+
*/
|
|
4143
|
+
async authenticate(client, methods) {
|
|
4144
|
+
const wanted = (this.cfg.authMethod || "").trim();
|
|
4145
|
+
if (!wanted) {
|
|
4146
|
+
this.cfg.onAuthSkipped?.();
|
|
4147
|
+
return;
|
|
4148
|
+
}
|
|
4149
|
+
const list = Array.isArray(methods) ? methods : [];
|
|
4150
|
+
const preferred = list.find((m) => m.id === wanted) ?? list[0];
|
|
4151
|
+
if (!preferred) {
|
|
4152
|
+
this.cfg.onAuthResult?.({ ok: false, error: "no auth methods" });
|
|
4153
|
+
return;
|
|
4154
|
+
}
|
|
4155
|
+
try {
|
|
4156
|
+
const r = await client.request("authenticate", { methodId: preferred.id }, 12e4);
|
|
4157
|
+
this.auth = r ?? {};
|
|
4158
|
+
this.cfg.onAuthResult?.({ ok: true, result: r ?? {} });
|
|
4159
|
+
} catch (e) {
|
|
4160
|
+
this.cfg.onAuthResult?.({ ok: false, error: e.message });
|
|
4161
|
+
}
|
|
4162
|
+
}
|
|
4163
|
+
};
|
|
4164
|
+
|
|
4165
|
+
// src/acp/permissions.ts
|
|
4166
|
+
var STANDARD_PERMISSION_KINDS = /* @__PURE__ */ new Set([
|
|
4167
|
+
"allow_once",
|
|
4168
|
+
"allow_always",
|
|
4169
|
+
"allow_session",
|
|
4170
|
+
"reject_once",
|
|
4171
|
+
"reject_always"
|
|
4172
|
+
]);
|
|
4173
|
+
function isChoiceOptions(options) {
|
|
4174
|
+
if (!options.length) return false;
|
|
4175
|
+
const allowOnceCount = options.filter((o) => o.kind === "allow_once").length;
|
|
4176
|
+
return options.some((o) => !STANDARD_PERMISSION_KINDS.has(o.kind)) || allowOnceCount > 1;
|
|
4177
|
+
}
|
|
4178
|
+
function chooseOption(options, status, scope) {
|
|
4179
|
+
if (!options.length) return void 0;
|
|
4180
|
+
const prefer = status === "deny" ? scope === "always" ? "reject_always" : "reject_once" : scope === "once" ? "allow_once" : scope === "session" ? "allow_session" : "allow_always";
|
|
4181
|
+
const exact = options.find((o) => o.kind === prefer);
|
|
4182
|
+
if (exact) return exact;
|
|
4183
|
+
const prefix = status === "deny" ? "reject" : "allow";
|
|
4184
|
+
return options.find((o) => String(o.kind ?? "").startsWith(prefix)) ?? options[0];
|
|
4185
|
+
}
|
|
4186
|
+
|
|
4187
|
+
// src/acp/mirror.ts
|
|
4188
|
+
import {
|
|
4189
|
+
existsSync as existsSync3,
|
|
4190
|
+
mkdirSync as mkdirSync2,
|
|
4191
|
+
readFileSync as readFileSync2,
|
|
4192
|
+
readdirSync,
|
|
4193
|
+
rmSync,
|
|
4194
|
+
statSync as statSync2,
|
|
4195
|
+
writeFileSync as writeFileSync2
|
|
4196
|
+
} from "fs";
|
|
4197
|
+
import { join as join3 } from "path";
|
|
4198
|
+
var FILE = "session.jsonl";
|
|
4199
|
+
var META = "meta.json";
|
|
4200
|
+
function createSessionMirror(rootDir) {
|
|
4201
|
+
const dirOf = (sessionID) => join3(rootDir, sessionID);
|
|
4202
|
+
function readMeta(sessionID) {
|
|
4203
|
+
try {
|
|
4204
|
+
const p = join3(dirOf(sessionID), META);
|
|
4205
|
+
if (existsSync3(p)) return JSON.parse(readFileSync2(p, "utf8"));
|
|
4206
|
+
} catch {
|
|
4207
|
+
}
|
|
4208
|
+
return null;
|
|
4209
|
+
}
|
|
4210
|
+
function writeMeta(sessionID, meta) {
|
|
4211
|
+
try {
|
|
4212
|
+
mkdirSync2(dirOf(sessionID), { recursive: true });
|
|
4213
|
+
writeFileSync2(join3(dirOf(sessionID), META), JSON.stringify(meta, null, 2), "utf8");
|
|
4214
|
+
} catch {
|
|
4215
|
+
}
|
|
4216
|
+
}
|
|
4217
|
+
function saveMeta(sessionID, patch) {
|
|
4218
|
+
const prev = readMeta(sessionID) || { title: "", titleAuto: true, created: Date.now(), updated: Date.now() };
|
|
4219
|
+
const meta = { ...prev, ...patch, updated: Date.now() };
|
|
4220
|
+
writeMeta(sessionID, meta);
|
|
4221
|
+
return meta;
|
|
4222
|
+
}
|
|
4223
|
+
function appendPart(sessionID, msgId, role, part, created = Date.now()) {
|
|
4224
|
+
try {
|
|
4225
|
+
const d = dirOf(sessionID);
|
|
4226
|
+
mkdirSync2(d, { recursive: true });
|
|
4227
|
+
const line = JSON.stringify({ id: msgId, role, parts: [part], created });
|
|
4228
|
+
writeFileSync2(join3(d, FILE), line + "\n", { encoding: "utf8", flag: "a" });
|
|
4229
|
+
if (role === "user" && part.type === "text" && part.text) {
|
|
4230
|
+
const meta = readMeta(sessionID);
|
|
4231
|
+
if (!meta || meta.titleAuto) {
|
|
4232
|
+
const t2 = part.text.trim();
|
|
4233
|
+
saveMeta(sessionID, { title: t2.length > 30 ? `${t2.slice(0, 30)}\u2026` : t2, titleAuto: false });
|
|
4234
|
+
}
|
|
4235
|
+
}
|
|
4236
|
+
saveMeta(sessionID, {});
|
|
4237
|
+
} catch {
|
|
4238
|
+
}
|
|
4239
|
+
}
|
|
4240
|
+
function exists(sessionID) {
|
|
4241
|
+
return existsSync3(join3(dirOf(sessionID), FILE));
|
|
4242
|
+
}
|
|
4243
|
+
function walkDirs() {
|
|
4244
|
+
try {
|
|
4245
|
+
return readdirSync(rootDir).filter((n) => existsSync3(join3(rootDir, n, FILE)));
|
|
4246
|
+
} catch {
|
|
4247
|
+
return [];
|
|
4248
|
+
}
|
|
4249
|
+
}
|
|
4250
|
+
async function listSessions() {
|
|
4251
|
+
const out = [];
|
|
4252
|
+
for (const id of walkDirs()) {
|
|
4253
|
+
const meta = readMeta(id);
|
|
4254
|
+
if (!meta) continue;
|
|
4255
|
+
out.push({ id, title: meta.title, created: meta.created, updated: meta.updated, status: "idle", workspace: meta.cwd });
|
|
4256
|
+
}
|
|
4257
|
+
return out.sort((a, b) => b.updated - a.updated);
|
|
4258
|
+
}
|
|
4259
|
+
async function readHistory(sessionID) {
|
|
4260
|
+
let lines;
|
|
4261
|
+
try {
|
|
4262
|
+
lines = readFileSync2(join3(dirOf(sessionID), FILE), "utf8").split("\n");
|
|
4263
|
+
} catch {
|
|
4264
|
+
return [];
|
|
4265
|
+
}
|
|
4266
|
+
const byId = /* @__PURE__ */ new Map();
|
|
4267
|
+
const order = [];
|
|
4268
|
+
for (const line of lines) {
|
|
4269
|
+
const s = line.trim();
|
|
4270
|
+
if (!s) continue;
|
|
4271
|
+
try {
|
|
4272
|
+
const o = JSON.parse(s);
|
|
4273
|
+
if (!o.id || !Array.isArray(o.parts)) continue;
|
|
4274
|
+
const hit = byId.get(o.id);
|
|
4275
|
+
if (hit) {
|
|
4276
|
+
hit.parts.push(...o.parts);
|
|
4277
|
+
} else {
|
|
4278
|
+
order.push(o.id);
|
|
4279
|
+
byId.set(o.id, { id: o.id, role: o.role, parts: [...o.parts], created: o.created ?? Date.now() });
|
|
4280
|
+
}
|
|
4281
|
+
} catch {
|
|
4282
|
+
}
|
|
4283
|
+
}
|
|
4284
|
+
return order.map((id) => byId.get(id)).filter((m) => m.parts.length).map((m) => ({ ...m, parts: mergeParts(m.parts) }));
|
|
4285
|
+
}
|
|
4286
|
+
async function removeSession(sessionID) {
|
|
4287
|
+
try {
|
|
4288
|
+
rmSync(dirOf(sessionID), { recursive: true, force: true });
|
|
4289
|
+
} catch {
|
|
4290
|
+
}
|
|
4291
|
+
}
|
|
4292
|
+
function dirSize(sessionID) {
|
|
4293
|
+
try {
|
|
4294
|
+
const st = statSync2(join3(dirOf(sessionID), FILE));
|
|
4295
|
+
return st.size;
|
|
4296
|
+
} catch {
|
|
4297
|
+
return 0;
|
|
4298
|
+
}
|
|
4299
|
+
}
|
|
4300
|
+
return {
|
|
4301
|
+
getMeta: readMeta,
|
|
4302
|
+
newSessionId,
|
|
4303
|
+
saveMeta,
|
|
4304
|
+
appendPart,
|
|
4305
|
+
exists,
|
|
4306
|
+
listSessions,
|
|
4307
|
+
readHistory,
|
|
4308
|
+
removeSession,
|
|
4309
|
+
dirSize
|
|
4310
|
+
};
|
|
4311
|
+
}
|
|
4312
|
+
function newSessionId() {
|
|
4313
|
+
if (typeof globalThis.crypto?.randomUUID === "function") return globalThis.crypto.randomUUID();
|
|
4314
|
+
return `s-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
4315
|
+
}
|
|
4316
|
+
function mergeParts(parts) {
|
|
4317
|
+
const byId = /* @__PURE__ */ new Map();
|
|
4318
|
+
const order = [];
|
|
4319
|
+
for (const p of parts) {
|
|
4320
|
+
const cur = byId.get(p.id);
|
|
4321
|
+
if (!cur) {
|
|
4322
|
+
order.push(p.id);
|
|
4323
|
+
byId.set(p.id, { ...p });
|
|
4324
|
+
continue;
|
|
4325
|
+
}
|
|
4326
|
+
const text = p.delta != null ? (cur.text || "") + p.delta : p.text != null ? p.text : cur.text;
|
|
4327
|
+
byId.set(p.id, { ...cur, ...p, text });
|
|
4328
|
+
}
|
|
4329
|
+
return order.map((id) => byId.get(id));
|
|
4330
|
+
}
|
|
3586
4331
|
export {
|
|
4332
|
+
AcpClient,
|
|
4333
|
+
AcpSupervisor,
|
|
3587
4334
|
DEFAULT_LANG,
|
|
3588
4335
|
DEFAULT_PAGE_SIZE,
|
|
3589
4336
|
LANG_TAGS,
|
|
@@ -3592,29 +4339,39 @@ export {
|
|
|
3592
4339
|
MAX_PART_TEXT,
|
|
3593
4340
|
MessagesCache,
|
|
3594
4341
|
RelayClient,
|
|
4342
|
+
STANDARD_PERMISSION_KINDS,
|
|
3595
4343
|
capMessage,
|
|
3596
4344
|
capMessages,
|
|
4345
|
+
chooseOption,
|
|
3597
4346
|
cmdLineFor,
|
|
4347
|
+
createSessionMirror,
|
|
3598
4348
|
detectSystemLang,
|
|
3599
4349
|
envelope,
|
|
3600
4350
|
findWinShim,
|
|
3601
4351
|
hyperlink,
|
|
3602
4352
|
injectedRelayUrl,
|
|
4353
|
+
isChoiceOptions,
|
|
3603
4354
|
killCliTree,
|
|
3604
4355
|
loadState,
|
|
3605
4356
|
makeT,
|
|
3606
4357
|
messagesCache,
|
|
3607
4358
|
needsCmdQuote,
|
|
4359
|
+
newSessionId,
|
|
3608
4360
|
normalizeLang,
|
|
4361
|
+
partMessage,
|
|
4362
|
+
planText,
|
|
3609
4363
|
printPairing,
|
|
3610
4364
|
renderPairingQrText,
|
|
3611
4365
|
resolveCliBinary,
|
|
3612
4366
|
resolveLang,
|
|
4367
|
+
safeJson,
|
|
3613
4368
|
saveState,
|
|
3614
4369
|
sliceWindow,
|
|
3615
4370
|
statePath,
|
|
3616
4371
|
supportsHyperlinks,
|
|
3617
4372
|
t,
|
|
4373
|
+
textOf,
|
|
4374
|
+
toolPart,
|
|
3618
4375
|
websiteUrl,
|
|
3619
4376
|
writePairingFile,
|
|
3620
4377
|
writePairingJson
|