@tunnelbox/core 0.1.9 → 0.1.11
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/README.md +28 -28
- package/README.zh-CN.md +28 -28
- package/dist/index.js +68 -3
- package/locales/de-DE.json +166 -165
- package/locales/en-US.json +166 -165
- package/locales/es-ES.json +166 -165
- package/locales/fr-FR.json +166 -165
- package/locales/ja-JP.json +166 -165
- package/locales/ko-KR.json +166 -165
- package/locales/zh-CN.json +166 -165
- package/locales/zh-TW.json +166 -165
- package/package.json +1 -1
- package/src/messages.ts +171 -171
- package/src/qr.ts +108 -108
- package/src/relay.ts +67 -2
package/locales/zh-TW.json
CHANGED
|
@@ -1,165 +1,166 @@
|
|
|
1
|
-
{
|
|
2
|
-
"agent.err.createSession": "建立會話失敗",
|
|
3
|
-
"agent.err.httpClient": "無法存取 opencode HTTP client",
|
|
4
|
-
"agent.err.unknownPerm": "未知的權限請求: {id}",
|
|
5
|
-
"agent.err.unknownQuestion": "未知的提問請求: {id}",
|
|
6
|
-
"agent.log.fallback404": "回包首選端點 404,改走另一端點: {message}",
|
|
7
|
-
"agent.log.gotPermReply": "收到手機權限回覆 (id={id} {reply} {version})",
|
|
8
|
-
"agent.log.gotQuestionReply": "收到手機提問回覆 (id={id} {status} {version})",
|
|
9
|
-
"agent.log.handleFailed": "處理 {type} 失敗: {message}",
|
|
10
|
-
"agent.log.msgOk": "取得會話訊息成功 session={session} data={count} 方式={limited} win={win} ms={ms}",
|
|
11
|
-
"agent.log.msgFailed": "取得會話訊息失敗 session={session} err={err} ms={ms}",
|
|
12
|
-
"agent.log.msgLimitFallback": "目前的 opencode 不支援 limit,改為全量取得(session={session})",
|
|
13
|
-
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
-
"agent.log.pendingResent": "session.pending: 補發 {session} 積壓請求 {count} 條",
|
|
15
|
-
"agent.log.unhandledType": "未處理的訊息類型: {type}",
|
|
16
|
-
"events.log.fwdPermission": "轉發權限請求到手機 (id={id} tool={tool} {version})",
|
|
17
|
-
"events.log.
|
|
18
|
-
"events.log.
|
|
19
|
-
"events.log.
|
|
20
|
-
"
|
|
21
|
-
"index.error.
|
|
22
|
-
"index.
|
|
23
|
-
"index.log.
|
|
24
|
-
"index.log.
|
|
25
|
-
"index.log.
|
|
26
|
-
"index.log.
|
|
27
|
-
"index.log.
|
|
28
|
-
"index.log.
|
|
29
|
-
"index.log.
|
|
30
|
-
"index.log.
|
|
31
|
-
"index.log.
|
|
32
|
-
"index.log.
|
|
33
|
-
"index.log.
|
|
34
|
-
"index.log.
|
|
35
|
-
"
|
|
36
|
-
"install.
|
|
37
|
-
"install.
|
|
38
|
-
"install.
|
|
39
|
-
"install.
|
|
40
|
-
"install.
|
|
41
|
-
"install.
|
|
42
|
-
"install.
|
|
43
|
-
"install.
|
|
44
|
-
"install.
|
|
45
|
-
"install.
|
|
46
|
-
"install.
|
|
47
|
-
"
|
|
48
|
-
"pair.
|
|
49
|
-
"pair.
|
|
50
|
-
"pair.
|
|
51
|
-
"pair.
|
|
52
|
-
"pair.
|
|
53
|
-
"
|
|
54
|
-
"perm.
|
|
55
|
-
"perm.
|
|
56
|
-
"perm.
|
|
57
|
-
"
|
|
58
|
-
"qr.
|
|
59
|
-
"qr.
|
|
60
|
-
"qr.
|
|
61
|
-
"qr.
|
|
62
|
-
"qr.
|
|
63
|
-
"
|
|
64
|
-
"claude.
|
|
65
|
-
"claude.
|
|
66
|
-
"claude.
|
|
67
|
-
"claude.
|
|
68
|
-
"claude.
|
|
69
|
-
"claude.
|
|
70
|
-
"claude.
|
|
71
|
-
"claude.
|
|
72
|
-
"claude.
|
|
73
|
-
"claude.
|
|
74
|
-
"claude.
|
|
75
|
-
"claude.
|
|
76
|
-
"claude.
|
|
77
|
-
"claude.
|
|
78
|
-
"claude.
|
|
79
|
-
"claude.
|
|
80
|
-
"claude.
|
|
81
|
-
"claude.
|
|
82
|
-
"claude.
|
|
83
|
-
"claude.
|
|
84
|
-
"claude.
|
|
85
|
-
"claude.
|
|
86
|
-
"claude.
|
|
87
|
-
"claude.
|
|
88
|
-
"claude.
|
|
89
|
-
"claude.
|
|
90
|
-
"claude.
|
|
91
|
-
"claude.
|
|
92
|
-
"claude.
|
|
93
|
-
"claude.
|
|
94
|
-
"claude.
|
|
95
|
-
"claude.
|
|
96
|
-
"claude.
|
|
97
|
-
"claude.
|
|
98
|
-
"claude.
|
|
99
|
-
"claude.
|
|
100
|
-
"claude.
|
|
101
|
-
"claude.
|
|
102
|
-
"claude.
|
|
103
|
-
"claude.
|
|
104
|
-
"claude.
|
|
105
|
-
"claude.
|
|
106
|
-
"claude.
|
|
107
|
-
"claude.
|
|
108
|
-
"claude.
|
|
109
|
-
"claude.
|
|
110
|
-
"claude.
|
|
111
|
-
"claude.
|
|
112
|
-
"claude.
|
|
113
|
-
"claude.
|
|
114
|
-
"claude.
|
|
115
|
-
"claude.
|
|
116
|
-
"claude.
|
|
117
|
-
"claude.
|
|
118
|
-
"claude.
|
|
119
|
-
"claude.
|
|
120
|
-
"claude.
|
|
121
|
-
"claude.
|
|
122
|
-
"claude.
|
|
123
|
-
"claude.
|
|
124
|
-
"claude.
|
|
125
|
-
"claude.
|
|
126
|
-
"claude.
|
|
127
|
-
"claude.
|
|
128
|
-
"
|
|
129
|
-
"setup.
|
|
130
|
-
"setup.
|
|
131
|
-
"
|
|
132
|
-
"hermes.
|
|
133
|
-
"hermes.
|
|
134
|
-
"hermes.
|
|
135
|
-
"hermes.
|
|
136
|
-
"hermes.
|
|
137
|
-
"hermes.
|
|
138
|
-
"hermes.
|
|
139
|
-
"hermes.
|
|
140
|
-
"hermes.
|
|
141
|
-
"hermes.
|
|
142
|
-
"hermes.
|
|
143
|
-
"hermes.
|
|
144
|
-
"hermes.
|
|
145
|
-
"hermes.
|
|
146
|
-
"hermes.
|
|
147
|
-
"hermes.
|
|
148
|
-
"hermes.
|
|
149
|
-
"hermes.
|
|
150
|
-
"hermes.
|
|
151
|
-
"hermes.
|
|
152
|
-
"hermes.
|
|
153
|
-
"hermes.
|
|
154
|
-
"hermes.
|
|
155
|
-
"hermes.
|
|
156
|
-
"hermes.
|
|
157
|
-
"hermes.
|
|
158
|
-
"hermes.
|
|
159
|
-
"hermes.
|
|
160
|
-
"hermes.
|
|
161
|
-
"hermes.
|
|
162
|
-
"hermes.
|
|
163
|
-
"hermes.
|
|
164
|
-
"hermes.
|
|
165
|
-
|
|
1
|
+
{
|
|
2
|
+
"agent.err.createSession": "建立會話失敗",
|
|
3
|
+
"agent.err.httpClient": "無法存取 opencode HTTP client",
|
|
4
|
+
"agent.err.unknownPerm": "未知的權限請求: {id}",
|
|
5
|
+
"agent.err.unknownQuestion": "未知的提問請求: {id}",
|
|
6
|
+
"agent.log.fallback404": "回包首選端點 404,改走另一端點: {message}",
|
|
7
|
+
"agent.log.gotPermReply": "收到手機權限回覆 (id={id} {reply} {version})",
|
|
8
|
+
"agent.log.gotQuestionReply": "收到手機提問回覆 (id={id} {status} {version})",
|
|
9
|
+
"agent.log.handleFailed": "處理 {type} 失敗: {message}",
|
|
10
|
+
"agent.log.msgOk": "取得會話訊息成功 session={session} data={count} 方式={limited} win={win} ms={ms}",
|
|
11
|
+
"agent.log.msgFailed": "取得會話訊息失敗 session={session} err={err} ms={ms}",
|
|
12
|
+
"agent.log.msgLimitFallback": "目前的 opencode 不支援 limit,改為全量取得(session={session})",
|
|
13
|
+
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
+
"agent.log.pendingResent": "session.pending: 補發 {session} 積壓請求 {count} 條",
|
|
15
|
+
"agent.log.unhandledType": "未處理的訊息類型: {type}",
|
|
16
|
+
"events.log.fwdPermission": "轉發權限請求到手機 (id={id} tool={tool} {version})",
|
|
17
|
+
"events.log.sessionDeleted": "轉發 session.deleted 到手機 (session={session})",
|
|
18
|
+
"events.log.permissionReplied": "opencode 回執 permission.replied (id={id} {response})",
|
|
19
|
+
"events.log.questionRejected": "opencode 回執 question.rejected (id={id})",
|
|
20
|
+
"events.log.questionReplied": "opencode 回執 question.replied (id={id})",
|
|
21
|
+
"index.error.connectRelay": "無法連接中繼,請檢查中繼位址後重試",
|
|
22
|
+
"index.error.pairTimeout": "等待配對碼逾時(中繼未回應)",
|
|
23
|
+
"index.log.claimed": "已綁定到手機帳號,之後手機直接從「我的電腦」連接,不需再掃碼",
|
|
24
|
+
"index.log.connectedRelay": "已連接中繼 {url}",
|
|
25
|
+
"index.log.loaded": "tunnelbox opencode 外掛已啟動(v{version})",
|
|
26
|
+
"index.log.disconnected": "與中繼斷線,正在自動重連…",
|
|
27
|
+
"index.log.exit": "已退出",
|
|
28
|
+
"index.log.pairCode": "產生配對碼: {code}",
|
|
29
|
+
"index.log.pairingStillClaimed": "此配對碼僅供同帳號的新手機重新配對;本機已綁定,仍可從手機「我的電腦」直接連接。",
|
|
30
|
+
"index.log.pairingPreparing": "正在連線中繼並產生配對碼…",
|
|
31
|
+
"index.log.permissionToPhone": "權限請求 → 手機審批 (id={id} tool={tool})",
|
|
32
|
+
"index.log.permissionTuiFallback": "app 離線,權限請求由 opencode TUI 代管 (id={id} tool={tool})",
|
|
33
|
+
"index.log.relayError": "中繼錯誤: {msg}",
|
|
34
|
+
"index.log.resetIdentity": "已解除帳號綁定,正在重設身分並重新產生配對碼…",
|
|
35
|
+
"index.log.unknown": "未知",
|
|
36
|
+
"install.codeLine": "配對碼: {code}",
|
|
37
|
+
"install.commandInstalled": "已安裝指令: {path}",
|
|
38
|
+
"install.done": "完成。已嘗試連接中繼輸出本機配對資訊:",
|
|
39
|
+
"install.failConnect": "(未能即時連接中繼列印配對資訊——中繼無法連線或目前 Node 過舊。",
|
|
40
|
+
"install.failConnectHint": "重啟 opencode 後可用 --print-logs 查看終端 QR Code,或是在 opencode 內輸入「顯示手機配對碼」或 /pair。)",
|
|
41
|
+
"install.hintFresh": "提示:配對碼為一次性,約 10 分鐘有效;若稍後才啟動 opencode,以啟動時終端列印或 /pair 取得的最新配對資訊為準。",
|
|
42
|
+
"install.pluginInstalled": "已安裝外掛: {path}",
|
|
43
|
+
"install.qrUnavailable": "(QR Code 無法顯示,請使用上方配對碼)",
|
|
44
|
+
"install.qrcodeEnsure": "正在將 qrcode 安裝到 opencode 設定目錄…",
|
|
45
|
+
"install.qrcodeFail": "qrcode 安裝失敗(不影響使用,僅顯示配對碼): {err}",
|
|
46
|
+
"install.relayError": "中繼傳回錯誤: {msg}",
|
|
47
|
+
"install.scanHint": "手機開啟 tunnelbox App「掃描配對」,掃描上方 QR Code 即可連接:",
|
|
48
|
+
"pair.heading": "tunnelbox 手機配對",
|
|
49
|
+
"pair.howTo": "在手機上開啟 tunnelbox App,用「掃描配對」掃描上方 QR Code,或手動輸入配對碼。",
|
|
50
|
+
"pair.oneTime": "配對碼為一次性,使用後即失效;如需新碼,可要求「重新整理配對碼」。",
|
|
51
|
+
"pair.promptBody": "請幫我查看本機手機遠端配對資訊:顯示配對碼與可供掃碼的 QR Code。QR Code 請放在等寬程式碼區塊內並逐字原樣保留,方便我用手機掃描。",
|
|
52
|
+
"pair.promptDescription": "顯示手機遠端配對的配對碼與掃碼 QR Code",
|
|
53
|
+
"pair.scanIntro": "**掃碼配對**:手機開啟 tunnelbox App「掃描配對」,掃描下方 QR Code 即可自動連接。",
|
|
54
|
+
"perm.promptAuthorize": "opencode 請求授權",
|
|
55
|
+
"perm.promptPatterns": "opencode 請求存取:{list}",
|
|
56
|
+
"perm.promptResource": "opencode 請求存取資源:{list}",
|
|
57
|
+
"perm.promptTool": "opencode 請求執行 {tool}",
|
|
58
|
+
"qr.codeLabel": "配對碼",
|
|
59
|
+
"qr.fileWritten": "配對資訊已寫入: {path}",
|
|
60
|
+
"qr.openHint": "開啟 tunnelbox App,用「掃描配對」掃描上方 QR Code,或手動輸入配對碼。",
|
|
61
|
+
"qr.titleNoType": "tunnelbox 手機配對",
|
|
62
|
+
"qr.titleWithType": "tunnelbox {type} 手機配對",
|
|
63
|
+
"qr.unavailable": "(未安裝 qrcode,請使用上方配對碼)",
|
|
64
|
+
"claude.errBusy": "該會話正在產生中,請等待完成或先停止",
|
|
65
|
+
"claude.errTurn": "產生出錯",
|
|
66
|
+
"claude.pairingStillClaimed": "已綁定手機帳號:此配對碼僅供同帳號新裝置重新配對,目前裝置可直接從手機「我的電腦」連接",
|
|
67
|
+
"claude.pairForced": "--pair:已強制申請配對碼(僅本次)",
|
|
68
|
+
"claude.pairUnclaimed": "未偵測到已綁定帳號,開始配對引導:",
|
|
69
|
+
"claude.claimedHint": "已綁定手機帳號:從手機「我的電腦」直接連接即可",
|
|
70
|
+
"claude.errStartFailed": "啟動失敗:",
|
|
71
|
+
"claude.msgStarted": "Claude Code 介面卡已啟動(Ctrl+C 結束)",
|
|
72
|
+
"claude.warnInvalidMode": "忽略無效 TUNNELBOX_CLAUDE_MODE: {raw}(允許 {list})",
|
|
73
|
+
"claude.warnInvalidThinking": "忽略無效 TUNNELBOX_CLAUDE_THINKING: {raw}(off|adaptive|enabled[:budget])",
|
|
74
|
+
"claude.cmdNew": "新開會話",
|
|
75
|
+
"claude.cmdHelp": "顯示說明",
|
|
76
|
+
"claude.errNoRelay": "未設定中繼位址:建置請用 --env 注入預設,執行可用 TUNNELBOX_RELAY_URL 覆寫",
|
|
77
|
+
"claude.logConnected": "已連線中繼 {url}",
|
|
78
|
+
"claude.logMsgUncaught": "訊息處理未捕獲例外: {message}",
|
|
79
|
+
"claude.reasonDisconnect": "中繼斷線(fail-closed 自動拒絕)",
|
|
80
|
+
"claude.reasonUnbind": "帳號解除綁定(fail-closed 自動拒絕)",
|
|
81
|
+
"claude.logDisconnected": "與中繼斷線,正在自動重連…",
|
|
82
|
+
"claude.logPairCode": "產生配對碼: {code}",
|
|
83
|
+
"claude.logUnhandledType": "未處理的訊息類型: {type}",
|
|
84
|
+
"claude.logHandleFailed": "處理 {type} 失敗: {message}",
|
|
85
|
+
"claude.newSessionTitle": "新會話",
|
|
86
|
+
"claude.helpText": "支援的指令:\n- /new 新開會話\n- /help 顯示說明",
|
|
87
|
+
"claude.logPromptFailed": "session.prompt 失敗: {message}",
|
|
88
|
+
"claude.logAbortSent": "已送出中止 (session={session})",
|
|
89
|
+
"claude.logAbortFailed": "中止失敗 (session={session}): {message}",
|
|
90
|
+
"claude.errBadWorkspaceEmpty": "缺少工作區路徑",
|
|
91
|
+
"claude.errBadWorkspaceNotDir": "該目錄不存在或不可用",
|
|
92
|
+
"claude.logWorkspaceSwitched": "切換工作區: {path}",
|
|
93
|
+
"claude.logUnknownQuestionReply": "未相符的結構化提問應答 (id={id})",
|
|
94
|
+
"claude.logFlushedQuestions": "已取消 {count} 個待回答提問: {reason}",
|
|
95
|
+
"claude.logFlushedApprovals": "已拒絕 {count} 個待作答請求: {reason}",
|
|
96
|
+
"claude.logPendingResent": "session.pending 補發待辦 {count} 筆 (session={session})",
|
|
97
|
+
"claude.logSetModeFailed": "setPermissionMode 失敗 (session={session}): {message}",
|
|
98
|
+
"claude.errWorkspaceMissing": "工作區不存在: {dir}",
|
|
99
|
+
"claude.logSessionError": "會話出錯 (session={session}): {message}",
|
|
100
|
+
"claude.logOfflineDenyTool": "中繼離線,自動拒絕工具 {tool}",
|
|
101
|
+
"claude.errOfflineDeny": "中繼離線,自動拒絕(fail-closed)",
|
|
102
|
+
"claude.logAuqDisabled": "AskUserQuestion 已關閉(TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0),自動拒絕",
|
|
103
|
+
"claude.errAuqDisabled": "AskUserQuestion 提問未啟用",
|
|
104
|
+
"claude.logAuqParseFailed": "AskUserQuestion input 解析失敗,自動拒絕(fail-closed)",
|
|
105
|
+
"claude.errAuqParse": "無法解析題目",
|
|
106
|
+
"claude.logAuqSkipped": "AskUserQuestion 未作答/取消 (session={session})",
|
|
107
|
+
"claude.errAuqCancelled": "使用者未選擇(cancelled)",
|
|
108
|
+
"claude.logAuqDone": "AskUserQuestion 作答完成 (session={session})",
|
|
109
|
+
"claude.promptRunTool": "Claude Code 請求執行 {tool}",
|
|
110
|
+
"claude.errApprovalTimeout": "審批逾時,自動拒絕(fail-closed)",
|
|
111
|
+
"claude.errUserDenied": "使用者拒絕",
|
|
112
|
+
"claude.errAborted": "請求已中止",
|
|
113
|
+
"claude.logPermToPhone": "審批請求(tool={tool}) → 傳送到手機權限卡 permissionID={id}",
|
|
114
|
+
"claude.errRelayUnreachable": "中繼不可達,自動拒絕(fail-closed)",
|
|
115
|
+
"claude.logQuestionOffline": "中繼離線,結構化提問自動取消",
|
|
116
|
+
"claude.logQuestionToPhone": "結構化提問({count} 題) → 傳送到手機 questionID={id}",
|
|
117
|
+
"claude.logDialogOffline": "中繼離線,對話框自動取消({tool})",
|
|
118
|
+
"claude.logDialogToPhone": "對話框請求(kind={kind} tool={tool}) → 傳送到手機權限卡 permissionID={id}",
|
|
119
|
+
"claude.logAuqDialogParse": "AskUserQuestion payload 解析失敗,維持預設行為(session={session})",
|
|
120
|
+
"claude.logDialogUnmapped": "request_user_dialog(kind={kind}) 未接入對應,維持預設行為(session={session})",
|
|
121
|
+
"claude.promptMcpAuth": "MCP「{server}」請求授權",
|
|
122
|
+
"claude.logElicitUnmapped": "MCP elicitation(server={server}, mode={mode}) 未接入,自動拒絕(session={session})",
|
|
123
|
+
"claude.logResetIdentity": "被帳號解除綁定,正在重設身分並重新產生配對碼…",
|
|
124
|
+
"claude.dialogConfirm": "Claude Code 請求確認({kind})",
|
|
125
|
+
"claude.resultTruncated": "…(結果過長已截斷)",
|
|
126
|
+
"claude.streamError": "claude 串流出錯",
|
|
127
|
+
"claude.errListSessions": "讀取 Claude 會話列表失敗",
|
|
128
|
+
"claude.errReadHistory": "讀取會話歷史失敗({id})",
|
|
129
|
+
"setup.langSet": "已設定執行語言",
|
|
130
|
+
"setup.langHint": "重新啟動介面卡後將以該語言輸出(執行時可被 TUNNELBOX_LANG 覆寫)。狀態檔:",
|
|
131
|
+
"setup.langCurrent": "目前執行語言",
|
|
132
|
+
"hermes.errNoRelay": "未設定中繼位址:建置請用 --env 注入預設,執行可用 TUNNELBOX_RELAY_URL 覆寫",
|
|
133
|
+
"hermes.logConnected": "已連線中繼 {url}",
|
|
134
|
+
"hermes.logMsgUncaught": "訊息處理未捕獲例外: {message}",
|
|
135
|
+
"hermes.logDisconnected": "與中繼斷線,正在自動重新連線…",
|
|
136
|
+
"hermes.logPairCode": "產生配對碼: {code}",
|
|
137
|
+
"hermes.logUnhandledType": "未處理的訊息類型: {type}",
|
|
138
|
+
"hermes.logHandleFailed": "處理 {type} 失敗: {message}",
|
|
139
|
+
"hermes.logClaimed": "已綁定到手機帳號,之後手機從「我的電腦」直接連線",
|
|
140
|
+
"hermes.logResetIdentity": "被帳號解綁,正在重設身分並重新產生配對碼…",
|
|
141
|
+
"hermes.cmdNew": "新增會話",
|
|
142
|
+
"hermes.cmdHelp": "顯示說明",
|
|
143
|
+
"hermes.newSessionTitle": "新會話",
|
|
144
|
+
"hermes.helpText": "支援的命令:\n- /new 新增會話\n- /help 顯示說明",
|
|
145
|
+
"hermes.errBusy": "此會話正在產生中,請等待完成或先停止",
|
|
146
|
+
"hermes.errBadWorkspace": "此目錄不存在或無法使用",
|
|
147
|
+
"hermes.logWorkspaceSwitched": "切換工作區: {path}",
|
|
148
|
+
"hermes.errWorkspaceMissing": "工作區不存在: {dir}",
|
|
149
|
+
"hermes.errStartFailed": "啟動失敗: {message}",
|
|
150
|
+
"hermes.msgStarted": "Hermes 介接器已啟動(Ctrl+C 退出)",
|
|
151
|
+
"hermes.logAbortSent": "已傳送中止 (session={session})",
|
|
152
|
+
"hermes.logPromptFailed": "session.prompt 失敗: {message}",
|
|
153
|
+
"hermes.logTurnError": "回合出錯 (session={session}): {message}",
|
|
154
|
+
"hermes.logPairForced": "--pair:已強制申請配對碼(僅本次)",
|
|
155
|
+
"hermes.pairingStillClaimed": "已綁定手機帳號:此配對碼僅供同帳號新裝置重新配對,目前裝置可直接從手機「我的電腦」連線",
|
|
156
|
+
"hermes.logPairNoRelay": "未設定中繼位址,無法申請配對碼",
|
|
157
|
+
"hermes.errSpawnHermes": "無法啟動 Hermes({bin}):請確認已安裝({err})",
|
|
158
|
+
"hermes.errHermesExit": "hermes 退出({code}): {err}",
|
|
159
|
+
"hermes.logSessionUpdated": "會話已更新 (session={session})",
|
|
160
|
+
"hermes.errNoInject": "手機訊息注入不可用(目前工作階段非互動式或處理程序未就緒)",
|
|
161
|
+
"hermes.pairNoRelay": "無法連線中繼(relay 不可達或 websockets 缺失)",
|
|
162
|
+
"hermes.pairTimeout": "申請配對碼逾時(中繼未回應)",
|
|
163
|
+
"hermes.errToolPair": "tunnelbox_pair 失敗: {err}",
|
|
164
|
+
"hermes.errToolStatus": "tunnelbox_status 失敗: {err}",
|
|
165
|
+
"hermes.cliUsage": "用法: /tunnelbox <pair|status>\n pair 向中繼申請手機配對碼並列印\n status 顯示中繼/綁定/連線狀態"
|
|
166
|
+
}
|