@tunnelbox/core 0.1.18 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,166 +1,307 @@
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 查看终端二维码,或在 opencode 内输入“显示手机配对码”或 /pair。)",
41
- "install.hintFresh": "提示:配对码为一次性,约 10 分钟有效;若稍后才启动 opencode,以启动时终端打印或 /pair 取得的最新配对信息为准。",
42
- "install.pluginInstalled": "已安装插件: {path}",
43
- "install.qrUnavailable": "(二维码渲染不可用,请使用上方配对码)",
44
- "install.qrcodeEnsure": "安装 qrcode 到 opencode 配置目录…",
45
- "install.qrcodeFail": "qrcode 安装失败(不影响使用,仅显示配对码): {err}",
46
- "install.relayError": "中继返回错误: {msg}",
47
- "install.scanHint": "手机打开 tunnelbox App「扫一扫配对」,扫描上方二维码即可连接:",
48
- "pair.heading": "tunnelbox 手机配对",
49
- "pair.howTo": "在手机上打开 tunnelbox App,用「扫一扫配对」扫描上方二维码,或手动输入配对码。",
50
- "pair.oneTime": "配对码为一次性,使用后即失效;如需新码,可要求“刷新配对码”。",
51
- "pair.promptBody": "请帮我查看本机手机远程配对信息:显示配对码与可供扫码的二维码。二维码请放在等宽代码块里并逐字原样保留,方便我用手机扫码。",
52
- "pair.promptDescription": "显示手机远程配对的配对码与扫码二维码",
53
- "pair.scanIntro": "**扫一扫配对**:手机打开 tunnelbox App「扫一扫配对」,扫描下方二维码即可自动连接。",
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,用「扫一扫配对」扫描上方二维码,或手动输入配对码。",
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
- }
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 查看终端二维码,或在 opencode 内输入“显示手机配对码”或 /pair。)",
41
+ "install.hintFresh": "提示:配对码为一次性,约 10 分钟有效;若稍后才启动 opencode,以启动时终端打印或 /pair 取得的最新配对信息为准。",
42
+ "install.pluginInstalled": "已安装插件: {path}",
43
+ "install.qrUnavailable": "(二维码渲染不可用,请使用上方配对码)",
44
+ "install.qrcodeEnsure": "安装 qrcode 到 opencode 配置目录…",
45
+ "install.qrcodeFail": "qrcode 安装失败(不影响使用,仅显示配对码): {err}",
46
+ "install.relayError": "中继返回错误: {msg}",
47
+ "install.scanHint": "手机打开 tunnelbox App「扫一扫配对」,扫描上方二维码即可连接:",
48
+ "pair.heading": "tunnelbox 手机配对",
49
+ "pair.howTo": "在手机上打开 tunnelbox App,用「扫一扫配对」扫描上方二维码,或手动输入配对码。",
50
+ "pair.oneTime": "配对码为一次性,约 10 分钟内有效;使用或过期后即失效,如需新码可要求“刷新配对码”。",
51
+ "pair.promptBody": "请帮我查看本机手机远程配对信息:显示配对码与可供扫码的二维码。二维码请放在等宽代码块里并逐字原样保留,方便我用手机扫码。",
52
+ "pair.promptDescription": "显示手机远程配对的配对码与扫码二维码",
53
+ "pair.scanIntro": "**扫一扫配对**:手机打开 tunnelbox App「扫一扫配对」,扫描下方二维码即可自动连接。",
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,用「扫一扫配对」扫描上方二维码,或手动输入配对码。",
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
+ "qr.validFor": "配对码约 10 分钟内有效,过期请在电脑端重新获取。",
167
+ "pair.toolDesc": "显示本机的手机配对信息(配对码与可扫描二维码)。当用户询问配对、扫描二维码或用手机控制本机时调用。",
168
+ "pair.toolRefreshDesc": "是否向中继申请新的配对码",
169
+ "state.errSaveState": "保存状态失败",
170
+ "adapter.logConnected": "已连接中继 {url}",
171
+ "adapter.logDisconnected": "与中继断开,正在自动重连…",
172
+ "adapter.logPairCode": "生成配对码: {code}",
173
+ "adapter.logClaimed": "已绑定到手机账号,之后手机从「我的电脑」直接连接",
174
+ "adapter.logResetIdentity": "被账号解绑,正在重置身份并重新生成配对码…",
175
+ "adapter.logUnhandledType": "未处理的消息类型: {type}",
176
+ "adapter.errNoRelay": "未配置中继地址:构建时用 --env 注入默认值,或运行时用 TUNNELBOX_RELAY_URL 覆盖",
177
+ "adapter.errBusy": "该会话正在生成中,请等待完成或先停止",
178
+ "adapter.errBadWorkspaceEmpty": "缺少工作区路径",
179
+ "adapter.errBadWorkspaceNotDir": "该目录不存在或不可用",
180
+ "adapter.errWorkspaceMissing": "工作区不存在: {dir}",
181
+ "adapter.cmdNew": "新建会话",
182
+ "adapter.cmdHelp": "显示帮助",
183
+ "adapter.helpText": "支持的命令:\n- /new 新建会话\n- /help 显示帮助",
184
+ "adapter.newSessionTitle": "新会话",
185
+ "install.langHelpTitle": "install-local 支持语言(--lang <tag>):",
186
+ "install.langHelpExample": "示例: npm run install-local -- --lang de-DE",
187
+ "install.unknownLang": "未知语言 \"{raw}\",已回退 en-US。支持:{list}",
188
+ "hermes.errAskRequired": "question 必填",
189
+ "hermes.msgPhoneUnavailable": "手机不可用或未应答:请改用内置 clarify 在本机提问,或自行判断继续。",
190
+ "hermes.errClarifyUnavailable": "clarify 支持不可用",
191
+ "hermes.errAskFailed": "tunnelbox_ask 失败: {err}",
192
+ "hermes.errClarifyFailed": "clarify 失败: {err}",
193
+ "bin.denied": "手机已拒绝",
194
+ "bin.timeout": "审批超时(fail-closed)",
195
+ "bin.reqRun": "Claude Code 请求执行 {tool}",
196
+ "bin.pairTitle": "tunnelbox 手机配对",
197
+ "bin.pairCodeLine": " 配对码: {code}",
198
+ "bin.pairHint": "打开 tunnelbox App,用「扫一扫配对」扫描二维码,或手动输入配对码(一次性)。",
199
+ "bin.pairWritten": " 配对信息已写入: {path}",
200
+ "bin.pairRequestFailed": "向中继申请配对码失败。",
201
+ "bin.alreadyClaimed": "本机已绑定手机账号,可直接在手机「我的电脑」里连接;如需重新配对,请先在手机端解绑。",
202
+ "bin.noRelay": "未配置中继地址:请设置环境变量 TUNNELBOX_RELAY_URL 后重试。",
203
+ "bin.connectFailed": "无法连接中继:{relay}\n请设置 TUNNELBOX_RELAY_URL 或在官方-plugin 状态文件中配置。",
204
+ "bin.statusRelay": "中继: {value}",
205
+ "bin.statusAgent": "agent 标识: {value}",
206
+ "bin.statusClaimed": "已绑定手机: {value}",
207
+ "bin.statusStateFile": "状态文件: {value}",
208
+ "bin.statusLatest": "最新配对信息:",
209
+ "bin.usage": "用法: tunnelbox <pair|status|ask>",
210
+ "bin.usagePair": " pair 取手机配对码并打印",
211
+ "bin.usageStatus": " status 显示中继/绑定状态",
212
+ "bin.usageAsk": " ask 把工具审批转发到手机",
213
+ "adapter.logMsgUncaught": "消息处理未捕获异常: {message}",
214
+ "adapter.logHandleFailed": "处理 {type} 失败: {message}",
215
+ "adapter.logPromptFailed": "session.prompt 失败: {message}",
216
+ "adapter.logAbortSent": "已发送中止 (session={session})",
217
+ "adapter.errUserDenied": "用户拒绝",
218
+ "adapter.logPendingResent": "session.pending 补发待审批 {count} 条",
219
+ "adapter.logWorkspaceSwitched": "切换工作区: {path}",
220
+ "adapter.logNewSession": "新会话落盘 codexId={codexId} (alias={session})",
221
+ "adapter.logSessionError": "回合出错 (session={session}): {message}",
222
+ "adapter.logDshSent": "已发送到 dsh (session={session})",
223
+ "adapter.logReadHistoryFailed": "读取会话历史失败({session}): {message}",
224
+ "adapter.logAnswererInitFailed": "应答器初始化失败: {message}",
225
+ "adapter.logRemoteMode": "双端同显模式:选择/审批走 typert 多端广播,手机与 dsh web 同显、谁答谁得",
226
+ "adapter.logRemoteProbeFailed": "typert 远程事件源探测失败,回退本地应答模式: {message}",
227
+ "adapter.logLocalMode": "本地应答模式:选择/审批由手机作答(headless,无 dsh web 广播)",
228
+ "adapter.logRemoteStreamInterrupted": "remote events 流中断: {message}",
229
+ "adapter.logResultRejected": "$events/result 未接受({eventId}): {message}",
230
+ "adapter.logResultBackfillFailed": "$events/result 回填失败({eventId}): {message}",
231
+ "adapter.logRemoteQuestion": "remote 提问广播 → 手机提问卡 questionID={id} (session={session})",
232
+ "adapter.errRemoteReadyFrame": "remote events 首帧异常",
233
+ "adapter.logRemoteApproval": "remote 审批广播 → 手机权限卡 permissionID={id} (session={session})",
234
+ "adapter.logUserQuestionRoute": "user-questions 选择 → 路由 session={session}",
235
+ "adapter.errDshQuestionEmpty": "dsh 提问内容为空",
236
+ "adapter.errQuestionTimeout": "提问超时({seconds}s),已取消",
237
+ "adapter.errQuestionCancelledAbort": "提问已取消(agent 中止)",
238
+ "adapter.errQuestionCancelledRelay": "中继不可达,提问已取消",
239
+ "adapter.logQuestionToPhone": "user-questions 选择 → 发送到手机提问卡 questionID={id} (session={session})",
240
+ "adapter.errQuestionUserCancelled": "用户在手机端取消/拒绝了提问",
241
+ "adapter.logApprovalRequest": "审批请求(tool={tool}) → 发送到手机权限卡 permissionID={id}",
242
+ "adapter.logAgentPresetFailed": "agentPreset 解析失败({preset}),降级为无 preset: {message}",
243
+ "adapter.logSessionLiveAdopted": "会话 {session} 已由本进程其它 agent 持有(live),采纳现有 agent 继续驱动: {message}",
244
+ "adapter.logDisposeSkipped": "已采纳的外部 live agent 不执行 dispose(会话 {session} 由原持有者管理)",
245
+ "adapter.logAgentCreateFailed": "创建/恢复 agent 失败({session}): {message}",
246
+ "adapter.errSessionBusyLive": "会话 {session} 正被占用(live),请稍后重试",
247
+ "adapter.errAgentsUnavailable": "agents 服务不可用",
248
+ "adapter.logToolReason": "dsh 请求执行工具 {tool}",
249
+ "adapter.logGatewayConnected": "已连接本机 OpenClaw Gateway({version})",
250
+ "adapter.logGatewayDisconnected": "与 OpenClaw Gateway 断开,正在由官方客户端重连…",
251
+ "adapter.logGatewayConnectFailed": "无法连接本机 OpenClaw Gateway(首次需在本机放行设备:`openclaw devices list` + `openclaw devices approve <requestId>`)",
252
+ "adapter.errGatewayNoSessionKey": "Gateway 未返回会话 key",
253
+ "adapter.logDeleteSessionFailed": "删除会话失败({session}): {message}(仍按已删除回执)",
254
+ "adapter.logApprovalReplyFailed": "审批应答失败({id}): {message}",
255
+ "adapter.logPendingApproval": "session.pending 补发待审批 {count} 条 (session={session})",
256
+ "adapter.workspaceDefault": "默认",
257
+ "adapter.cursorSessionTitle": "Cursor 会话",
258
+ "adapter.reasonDisconnect": "中继断开,自动拒绝(fail-closed)",
259
+ "adapter.warnInvalidEnv": "忽略无效 {name}: {raw}({list})",
260
+ "adapter.errStartFailed": "启动失败:",
261
+ "adapter.msgStarted": "{name} 适配器已启动(Ctrl+C 退出)",
262
+ "adapter.warnCliMissing": "未找到可执行文件「{bin}」;请先安装(如 npm i -g @openai/codex),或用 TUNNELBOX_CODEX_BIN 指定可执行文件路径",
263
+ "adapter.errCliNotFound": "未找到 {name} 可执行文件「{bin}」:请安装 Codex CLI(npm i -g @openai/codex)或设置 TUNNELBOX_CODEX_BIN",
264
+ "adapter.errSessionNotFound": "会话不存在或已被删除",
265
+ "adapter.checkHeader": "tunnelbox-codex 环境自检",
266
+ "adapter.checkCliOk": "{name} 可执行文件: {path}",
267
+ "adapter.checkCliMissing": "未找到 {name} 可执行文件({bin})",
268
+ "bin.yes": "是",
269
+ "bin.no": "否",
270
+ "adapter.errAppServerSpawn": "无法启动 codex app-server:{message}(请确认 Codex CLI 支持 `codex app-server`)",
271
+ "adapter.errAppServerExit": "codex app-server 已退出,进行中的审批/选择已自动拒绝",
272
+ "adapter.logUnsupportedServerRequest": "暂不支持的 app-server 请求: {method}",
273
+ "adapter.logQuestionNative": "选择请求 → 手机选择卡 questionID={id} (session={session})",
274
+ "adapter.logPermissionNative": "审批请求 → 手机权限卡 permissionID={id} (session={session})",
275
+ "adapter.checkAppServerOk": "codex app-server 可用",
276
+ "adapter.checkAppServerMissing": "当前 Codex CLI 不支持 `codex app-server`(请升级 Codex CLI)",
277
+ "adapter.warnCursorCliMissing": "未找到 Cursor CLI 可执行文件 \"{bin}\":请安装(https://cursor.com/docs/cli),或用 TUNNELBOX_CURSOR_BIN 指定路径",
278
+ "adapter.checkCursorCliMissing": "未找到 Cursor CLI 可执行文件({bin}):请从 https://cursor.com/docs/cli 安装",
279
+ "adapter.checkCursorAcpHint": "已检测到 Cursor CLI;将使用 ACP 模式(`agent acp`)提供流式/审批/选择",
280
+ "adapter.errAcpSpawn": "启动 cursor `agent acp` 失败:{message}(请确认 Cursor CLI 支持 `agent acp`)",
281
+ "adapter.errAcpNoSession": "Cursor ACP 未返回会话 id",
282
+ "adapter.logResumeFailed": "会话恢复失败,改为新建会话:{message}",
283
+ "adapter.logPlanNative": "计划审批 → 手机审批卡 permissionID={id} (session={session})",
284
+ "adapter.errTimeout": "等待超时,自动拒绝(fail-closed)",
285
+ "adapter.planApprovalPrompt": "Cursor 请求批准一项计划",
286
+ "adapter.checkCursorHeader": "tunnelbox-cursor 环境自检",
287
+ "adapter.errAskBridge": "启动 ask 桥失败:{message}",
288
+ "adapter.logAskBridge": "MCP ask 桥已监听 {url}",
289
+ "cursor.mcpAskDesc": "让用户在手机上(tunnelbox)做选择,并阻塞等待其作答。只要需要用户在继续前于若干选项中做出选择(如选菜、选模式、选方案)就调用它。返回用户所选的选项文本。",
290
+ "cursor.mcpAskTitleDesc": "手机卡片上显示的标题(可选)",
291
+ "cursor.mcpAskQuestionsDesc": "一个或多个问题;每个问题带可选项",
292
+ "cursor.mcpPlanDesc": "让用户在手机上(tunnelbox)批准一项计划,并阻塞等待其应答。返回计划是否被接受。",
293
+ "cursor.mcpNoBridge": "tunnelbox ask 桥不可用",
294
+ "cursor.mcpUnanswered": "用户未在手机上作答(离线或超时)。请继续,或用对话方式询问。",
295
+ "cursor.mcpRejected": "用户在手机上拒绝了这个提问。",
296
+ "cursor.mcpAnswersHeader": "用户(手机)的选择:",
297
+ "cursor.mcpAccepted": "用户已接受该计划。",
298
+ "cursor.mcpDenied": "用户拒绝了该计划。",
299
+ "cursor.mcpPlanUnanswered": "用户未在手机上回应计划(离线或超时)。",
300
+ "cursor.mcpAskNoQuestions": "未提供任何问题。",
301
+ "cursor.mcpFailed": "tunnelbox ask 调用失败",
302
+ "adapter.errCursorExitCode": "Cursor CLI 退出码 {code}",
303
+ "adapter.errCursorExit": "Cursor CLI 退出({code}): {err}",
304
+ "adapter.errCursorSpawn": "无法启动 Cursor CLI(agent):请确认已安装并登录({message})",
305
+ "adapter.errCursorStart": "Cursor CLI 启动失败: {message}",
306
+ "adapter.errCursorGeneric": "Cursor 出错"
307
+ }