@tunnelbox/core 0.1.10 → 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 +67 -2
- 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/en-US.json
CHANGED
|
@@ -1,165 +1,166 @@
|
|
|
1
|
-
{
|
|
2
|
-
"agent.err.createSession": "Failed to create session",
|
|
3
|
-
"agent.err.httpClient": "Cannot access the opencode HTTP client",
|
|
4
|
-
"agent.err.unknownPerm": "Unknown permission request: {id}",
|
|
5
|
-
"agent.err.unknownQuestion": "Unknown question request: {id}",
|
|
6
|
-
"agent.log.fallback404": "Preferred endpoint returned 404, falling back to the other one: {message}",
|
|
7
|
-
"agent.log.gotPermReply": "Received permission reply from phone (id={id} {reply} {version})",
|
|
8
|
-
"agent.log.gotQuestionReply": "Received question reply from phone (id={id} {status} {version})",
|
|
9
|
-
"agent.log.handleFailed": "Failed to handle {type}: {message}",
|
|
10
|
-
"agent.log.msgOk": "session.messages OK session={session} data={count} limited={limited} win={win} ms={ms}",
|
|
11
|
-
"agent.log.msgFailed": "session.messages FAILED session={session} err={err} ms={ms}",
|
|
12
|
-
"agent.log.msgLimitFallback": "limit unsupported, fell back to full session fetch (session={session})",
|
|
13
|
-
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
-
"agent.log.pendingResent": "session.pending: resent {count} pending request(s) for {session}",
|
|
15
|
-
"agent.log.unhandledType": "Unhandled message type: {type}",
|
|
16
|
-
"events.log.fwdPermission": "Forwarded permission request to phone (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": "Failed to create session",
|
|
3
|
+
"agent.err.httpClient": "Cannot access the opencode HTTP client",
|
|
4
|
+
"agent.err.unknownPerm": "Unknown permission request: {id}",
|
|
5
|
+
"agent.err.unknownQuestion": "Unknown question request: {id}",
|
|
6
|
+
"agent.log.fallback404": "Preferred endpoint returned 404, falling back to the other one: {message}",
|
|
7
|
+
"agent.log.gotPermReply": "Received permission reply from phone (id={id} {reply} {version})",
|
|
8
|
+
"agent.log.gotQuestionReply": "Received question reply from phone (id={id} {status} {version})",
|
|
9
|
+
"agent.log.handleFailed": "Failed to handle {type}: {message}",
|
|
10
|
+
"agent.log.msgOk": "session.messages OK session={session} data={count} limited={limited} win={win} ms={ms}",
|
|
11
|
+
"agent.log.msgFailed": "session.messages FAILED session={session} err={err} ms={ms}",
|
|
12
|
+
"agent.log.msgLimitFallback": "limit unsupported, fell back to full session fetch (session={session})",
|
|
13
|
+
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
+
"agent.log.pendingResent": "session.pending: resent {count} pending request(s) for {session}",
|
|
15
|
+
"agent.log.unhandledType": "Unhandled message type: {type}",
|
|
16
|
+
"events.log.fwdPermission": "Forwarded permission request to phone (id={id} tool={tool} {version})",
|
|
17
|
+
"events.log.sessionDeleted": "Forwarded session.deleted to phone (session={session})",
|
|
18
|
+
"events.log.permissionReplied": "opencode acked permission.replied (id={id} {response})",
|
|
19
|
+
"events.log.questionRejected": "opencode acked question.rejected (id={id})",
|
|
20
|
+
"events.log.questionReplied": "opencode acked question.replied (id={id})",
|
|
21
|
+
"index.error.connectRelay": "Cannot connect to the relay; check the relay address and try again",
|
|
22
|
+
"index.error.pairTimeout": "Timed out waiting for a pairing code (the relay did not respond)",
|
|
23
|
+
"index.log.claimed": "Bound to your phone account. From now on the phone connects directly from My Computers; no need to scan again",
|
|
24
|
+
"index.log.connectedRelay": "Connected to relay {url}",
|
|
25
|
+
"index.log.loaded": "tunnelbox opencode plugin started (v{version})",
|
|
26
|
+
"index.log.disconnected": "Disconnected from relay, reconnecting automatically…",
|
|
27
|
+
"index.log.exit": "Exited",
|
|
28
|
+
"index.log.pairCode": "Generated pairing code: {code}",
|
|
29
|
+
"index.log.pairingStillClaimed": "This pairing code is for re-pairing a new phone under the same account. This computer is already linked and stays reachable from “My Computers” on your phone.",
|
|
30
|
+
"index.log.pairingPreparing": "Connecting to the relay and generating a pairing code…",
|
|
31
|
+
"index.log.permissionToPhone": "Permission request → phone approval (id={id} tool={tool})",
|
|
32
|
+
"index.log.permissionTuiFallback": "App offline; permission request handled by the opencode TUI (id={id} tool={tool})",
|
|
33
|
+
"index.log.relayError": "Relay error: {msg}",
|
|
34
|
+
"index.log.resetIdentity": "Unbound from the account; resetting identity and generating a new pairing code…",
|
|
35
|
+
"index.log.unknown": "Unknown",
|
|
36
|
+
"install.codeLine": "Pairing code: {code}",
|
|
37
|
+
"install.commandInstalled": "Installed command: {path}",
|
|
38
|
+
"install.done": "Done. Attempted to connect to the relay and output pairing info:",
|
|
39
|
+
"install.failConnect": "(Could not connect to the relay to print pairing info — the relay may be unreachable or the Node version is too old.",
|
|
40
|
+
"install.failConnectHint": "After restarting opencode, check the terminal QR code with --print-logs, or type “show phone pairing code” / /pair inside opencode.)",
|
|
41
|
+
"install.hintFresh": "Note: the pairing code is single-use and valid for about 10 minutes. If you start opencode later, use the latest pairing info printed at startup or obtained via /pair.",
|
|
42
|
+
"install.pluginInstalled": "Installed plugin: {path}",
|
|
43
|
+
"install.qrUnavailable": "(QR rendering unavailable — use the pairing code above)",
|
|
44
|
+
"install.qrcodeEnsure": "Installing qrcode into the opencode config directory…",
|
|
45
|
+
"install.qrcodeFail": "qrcode installation failed (not critical — only the pairing code is shown): {err}",
|
|
46
|
+
"install.relayError": "Relay returned an error: {msg}",
|
|
47
|
+
"install.scanHint": "Open tunnelbox on your phone, tap “Scan to pair”, and scan the QR code above to connect:",
|
|
48
|
+
"pair.heading": "tunnelbox phone pairing",
|
|
49
|
+
"pair.howTo": "Open the tunnelbox app on your phone and scan the QR code above with “Scan to pair”, or enter the pairing code manually.",
|
|
50
|
+
"pair.oneTime": "The pairing code is single-use and invalidates after it is claimed; ask to “refresh the pairing code” for a new one.",
|
|
51
|
+
"pair.promptBody": "Please show this computer's phone pairing info: the pairing code and a QR code I can scan. Keep the QR code inside a monospaced code block and reproduce it character-for-character so my phone can scan it.",
|
|
52
|
+
"pair.promptDescription": "Show the phone pairing code and scan-able QR code",
|
|
53
|
+
"pair.scanIntro": "**Pair by scanning**: open the tunnelbox app on your phone, tap “Scan to pair”, and scan the QR code below to connect automatically.",
|
|
54
|
+
"perm.promptAuthorize": "opencode requests authorization",
|
|
55
|
+
"perm.promptPatterns": "opencode requests access to: {list}",
|
|
56
|
+
"perm.promptResource": "opencode requests access to resources: {list}",
|
|
57
|
+
"perm.promptTool": "opencode requests to run {tool}",
|
|
58
|
+
"qr.codeLabel": "Pairing code",
|
|
59
|
+
"qr.fileWritten": "Pairing info written to: {path}",
|
|
60
|
+
"qr.openHint": "Open the tunnelbox app on your phone and scan the QR code above, or enter the pairing code manually in the app.",
|
|
61
|
+
"qr.titleNoType": "tunnelbox phone pairing",
|
|
62
|
+
"qr.titleWithType": "tunnelbox {type} phone pairing",
|
|
63
|
+
"qr.unavailable": "(qrcode not installed — use the pairing code above)",
|
|
64
|
+
"claude.errBusy": "This session is still running; wait for it to finish or stop it first",
|
|
65
|
+
"claude.errTurn": "generation error",
|
|
66
|
+
"claude.pairingStillClaimed": "Already bound to a phone account: this code is only for pairing a new device on the same account; the current device connects directly from My Computers",
|
|
67
|
+
"claude.pairForced": "--pair: forcing a pairing code request (this run only)",
|
|
68
|
+
"claude.pairUnclaimed": "No bound account detected; starting pairing guide:",
|
|
69
|
+
"claude.claimedHint": "Bound to a phone account: connect directly from My Computers on the phone",
|
|
70
|
+
"claude.errStartFailed": "Failed to start:",
|
|
71
|
+
"claude.msgStarted": "Claude Code adapter started (Ctrl+C to quit)",
|
|
72
|
+
"claude.warnInvalidMode": "Ignoring invalid TUNNELBOX_CLAUDE_MODE: {raw} (allowed {list})",
|
|
73
|
+
"claude.warnInvalidThinking": "Ignoring invalid TUNNELBOX_CLAUDE_THINKING: {raw} (off|adaptive|enabled[:budget])",
|
|
74
|
+
"claude.cmdNew": "New session",
|
|
75
|
+
"claude.cmdHelp": "Show help",
|
|
76
|
+
"claude.errNoRelay": "No relay URL configured: build with --env to inject a default, or override at runtime with TUNNELBOX_RELAY_URL",
|
|
77
|
+
"claude.logConnected": "Connected to relay {url}",
|
|
78
|
+
"claude.logMsgUncaught": "Uncaught exception while handling message: {message}",
|
|
79
|
+
"claude.reasonDisconnect": "Relay disconnected (fail-closed auto-reject)",
|
|
80
|
+
"claude.reasonUnbind": "Account unbound (fail-closed auto-reject)",
|
|
81
|
+
"claude.logDisconnected": "Disconnected from relay, reconnecting automatically…",
|
|
82
|
+
"claude.logPairCode": "Generated pairing code: {code}",
|
|
83
|
+
"claude.logUnhandledType": "Unhandled message type: {type}",
|
|
84
|
+
"claude.logHandleFailed": "Failed to handle {type}: {message}",
|
|
85
|
+
"claude.newSessionTitle": "New session",
|
|
86
|
+
"claude.helpText": "Supported commands:\n- /new new session\n- /help show help",
|
|
87
|
+
"claude.logPromptFailed": "session.prompt failed: {message}",
|
|
88
|
+
"claude.logAbortSent": "Abort sent (session={session})",
|
|
89
|
+
"claude.logAbortFailed": "Abort failed (session={session}): {message}",
|
|
90
|
+
"claude.errBadWorkspaceEmpty": "Missing workspace path",
|
|
91
|
+
"claude.errBadWorkspaceNotDir": "Directory does not exist or is unusable",
|
|
92
|
+
"claude.logWorkspaceSwitched": "Switched workspace: {path}",
|
|
93
|
+
"claude.logUnknownQuestionReply": "Unmatched structured question reply (id={id})",
|
|
94
|
+
"claude.logFlushedQuestions": "Cancelled {count} pending question(s): {reason}",
|
|
95
|
+
"claude.logFlushedApprovals": "Rejected {count} pending request(s): {reason}",
|
|
96
|
+
"claude.logPendingResent": "session.pending: resent {count} pending item(s) for {session}",
|
|
97
|
+
"claude.logSetModeFailed": "setPermissionMode failed (session={session}): {message}",
|
|
98
|
+
"claude.errWorkspaceMissing": "Workspace does not exist: {dir}",
|
|
99
|
+
"claude.logSessionError": "Session error (session={session}): {message}",
|
|
100
|
+
"claude.logOfflineDenyTool": "Relay offline, auto-rejecting tool {tool}",
|
|
101
|
+
"claude.errOfflineDeny": "Relay offline, auto-rejected (fail-closed)",
|
|
102
|
+
"claude.logAuqDisabled": "AskUserQuestion disabled (TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), auto-rejected",
|
|
103
|
+
"claude.errAuqDisabled": "AskUserQuestion is not enabled",
|
|
104
|
+
"claude.logAuqParseFailed": "Failed to parse AskUserQuestion input, auto-rejected (fail-closed)",
|
|
105
|
+
"claude.errAuqParse": "Could not parse the questions",
|
|
106
|
+
"claude.logAuqSkipped": "AskUserQuestion unanswered/cancelled (session={session})",
|
|
107
|
+
"claude.errAuqCancelled": "User did not select (cancelled)",
|
|
108
|
+
"claude.logAuqDone": "AskUserQuestion answered (session={session})",
|
|
109
|
+
"claude.promptRunTool": "Claude Code requests to run {tool}",
|
|
110
|
+
"claude.errApprovalTimeout": "Approval timed out, auto-rejected (fail-closed)",
|
|
111
|
+
"claude.errUserDenied": "Rejected by user",
|
|
112
|
+
"claude.errAborted": "Request aborted",
|
|
113
|
+
"claude.logPermToPhone": "Permission request (tool={tool}) → sent to phone as permissionID={id}",
|
|
114
|
+
"claude.errRelayUnreachable": "Relay unreachable, auto-rejected (fail-closed)",
|
|
115
|
+
"claude.logQuestionOffline": "Relay offline, structured question auto-cancelled",
|
|
116
|
+
"claude.logQuestionToPhone": "Structured question ({count} item(s)) → sent to phone questionID={id}",
|
|
117
|
+
"claude.logDialogOffline": "Relay offline, dialog auto-cancelled ({tool})",
|
|
118
|
+
"claude.logDialogToPhone": "Dialog request (kind={kind} tool={tool}) → sent to phone as permissionID={id}",
|
|
119
|
+
"claude.logAuqDialogParse": "Failed to parse AskUserQuestion payload, keeping default behavior (session={session})",
|
|
120
|
+
"claude.logDialogUnmapped": "request_user_dialog(kind={kind}) has no mapping, keeping default behavior (session={session})",
|
|
121
|
+
"claude.promptMcpAuth": "MCP “{server}” requests authorization",
|
|
122
|
+
"claude.logElicitUnmapped": "MCP elicitation (server={server}, mode={mode}) not handled, auto-rejected (session={session})",
|
|
123
|
+
"claude.logResetIdentity": "Unbound from account; resetting identity and generating a new pairing code…",
|
|
124
|
+
"claude.dialogConfirm": "Claude Code requests confirmation ({kind})",
|
|
125
|
+
"claude.resultTruncated": "… (result truncated)",
|
|
126
|
+
"claude.streamError": "claude streaming error",
|
|
127
|
+
"claude.errListSessions": "Failed to read Claude session list",
|
|
128
|
+
"claude.errReadHistory": "Failed to read session history ({id})",
|
|
129
|
+
"setup.langSet": "Runtime language set to",
|
|
130
|
+
"setup.langHint": "The adapter will output in this language after restart (runtime TUNNELBOX_LANG can override). State file:",
|
|
131
|
+
"setup.langCurrent": "Current runtime language",
|
|
132
|
+
"hermes.errNoRelay": "No relay URL configured: build with --env to inject a default, or override at runtime with TUNNELBOX_RELAY_URL",
|
|
133
|
+
"hermes.logConnected": "Connected to relay {url}",
|
|
134
|
+
"hermes.logMsgUncaught": "Uncaught exception while handling message: {message}",
|
|
135
|
+
"hermes.logDisconnected": "Disconnected from relay, reconnecting automatically…",
|
|
136
|
+
"hermes.logPairCode": "Generated pairing code: {code}",
|
|
137
|
+
"hermes.logUnhandledType": "Unhandled message type: {type}",
|
|
138
|
+
"hermes.logHandleFailed": "Failed to handle {type}: {message}",
|
|
139
|
+
"hermes.logClaimed": "Bound to your phone account. From now on the phone connects directly from My Computers",
|
|
140
|
+
"hermes.logResetIdentity": "Unbound from the account; resetting identity and generating a new pairing code…",
|
|
141
|
+
"hermes.cmdNew": "New session",
|
|
142
|
+
"hermes.cmdHelp": "Show help",
|
|
143
|
+
"hermes.newSessionTitle": "New session",
|
|
144
|
+
"hermes.helpText": "Supported commands:\n- /new new session\n- /help show help",
|
|
145
|
+
"hermes.errBusy": "This session is still running; wait for it to finish or stop it first",
|
|
146
|
+
"hermes.errBadWorkspace": "Directory does not exist or is unusable",
|
|
147
|
+
"hermes.logWorkspaceSwitched": "Switched workspace: {path}",
|
|
148
|
+
"hermes.errWorkspaceMissing": "Workspace does not exist: {dir}",
|
|
149
|
+
"hermes.errStartFailed": "Failed to start: {message}",
|
|
150
|
+
"hermes.msgStarted": "Hermes adapter started (Ctrl+C to quit)",
|
|
151
|
+
"hermes.logAbortSent": "Abort sent (session={session})",
|
|
152
|
+
"hermes.logPromptFailed": "session.prompt failed: {message}",
|
|
153
|
+
"hermes.logTurnError": "Turn error (session={session}): {message}",
|
|
154
|
+
"hermes.logPairForced": "--pair: forcing a pairing code request (this run only)",
|
|
155
|
+
"hermes.pairingStillClaimed": "Already bound to a phone account: this code is only for pairing a new device on the same account; the current device connects directly from My Computers",
|
|
156
|
+
"hermes.logPairNoRelay": "Cannot request a pairing code: no relay URL configured",
|
|
157
|
+
"hermes.errSpawnHermes": "Cannot start Hermes ({bin}): please confirm it is installed ({err})",
|
|
158
|
+
"hermes.errHermesExit": "hermes exited ({code}): {err}",
|
|
159
|
+
"hermes.logSessionUpdated": "Session updated (session={session})",
|
|
160
|
+
"hermes.errNoInject": "Phone message injection unavailable (session not interactive or process not ready)",
|
|
161
|
+
"hermes.pairNoRelay": "Cannot reach the relay (relay unreachable or websockets missing)",
|
|
162
|
+
"hermes.pairTimeout": "Timed out requesting a pairing code (relay did not respond)",
|
|
163
|
+
"hermes.errToolPair": "tunnelbox_pair failed: {err}",
|
|
164
|
+
"hermes.errToolStatus": "tunnelbox_status failed: {err}",
|
|
165
|
+
"hermes.cliUsage": "Usage: /tunnelbox <pair|status>\n pair request and print a phone pairing code\n status show relay/binding/connection status"
|
|
166
|
+
}
|