@cjhyy/code-shell-web 0.8.0

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.
@@ -0,0 +1,323 @@
1
+ /** Mobile remote web app strings. Owns top-level key `mobile`. */
2
+ export const mobile = {
3
+ zh: {
4
+ mobile: {
5
+ app: {
6
+ extendGoal: "延长目标",
7
+ clearGoal: "清除目标",
8
+ loadingCcSession: "正在加载 CC 会话…",
9
+ loadingSession: "正在加载会话…",
10
+ conversationFallback: "对话",
11
+ desktopSession: "桌面会话",
12
+ newSession: "新会话",
13
+ openSessionsAria: "打开会话",
14
+ leaveSessionAria: "退出会话",
15
+ deviceFallback: "设备",
16
+ logoutAria: "退出登录",
17
+ permission: "权限",
18
+ ccRoomObserving: "此会话当前为只读查看;请在桌面端明确接管后再发送消息。",
19
+ },
20
+ approval: {
21
+ risk: {
22
+ low: "低风险",
23
+ medium: "中风险",
24
+ high: "高风险",
25
+ },
26
+ readSourceSummary: "读取数据源 {source} / {scope} / {resource}",
27
+ question: "问题",
28
+ customPlaceholder: "或输入自定义回答…",
29
+ sendCustom: "发送自定义回答",
30
+ rememberScope: "记住范围",
31
+ scope: {
32
+ once: "仅本次",
33
+ session: "本会话",
34
+ project: "本项目",
35
+ },
36
+ pathScopeLabel: "路径范围",
37
+ pathScope: {
38
+ file: "此文件",
39
+ dir: "此目录",
40
+ tool: "此工具",
41
+ },
42
+ allow: "允许",
43
+ reject: "拒绝",
44
+ },
45
+ cc: {
46
+ title: "CC 会话",
47
+ subtitle: "外部 {label} 会话",
48
+ selectProjectFirst: "先选择一个项目。",
49
+ probingCli: "正在检测 {label} CLI…",
50
+ cliMissing: "未检测到 {label} CLI(需在桌面端机器的 PATH 中)。",
51
+ loadingSessions: "正在加载 cc 会话…",
52
+ empty: "该项目下没有 {label} 会话。",
53
+ messageCount: "{count} 条",
54
+ },
55
+ sidePane: {
56
+ localTab: "会话",
57
+ ccTab: "CC 会话",
58
+ },
59
+ composer: {
60
+ disconnected: "未连接",
61
+ placeholder: "发消息…",
62
+ stop: "停止",
63
+ send: "发送",
64
+ chooseImages: "从相册选择图片",
65
+ takePhoto: "拍照",
66
+ removeImage: "移除图片",
67
+ uploading: "上传中…",
68
+ tooManyImages: "每条消息最多发送 4 张图片",
69
+ unsupportedImage: "不支持此图片格式",
70
+ sendFailed: "图片发送失败,请重试",
71
+ },
72
+ connection: {
73
+ connectingTitle: "正在连接…",
74
+ connectingBody: "与 CodeShell 建立通道",
75
+ authenticatingTitle: "认证中…",
76
+ authenticatingBody: "正在校验设备身份",
77
+ unpairedTitle: "未配对",
78
+ unpairedBody: "请在 CodeShell 桌面端打开「设置 → 远程」,扫码或打开配对链接。",
79
+ offlineTitle: "连接断开",
80
+ offlineBody: "正在自动重连…",
81
+ },
82
+ format: {
83
+ noProject: "无项目",
84
+ justNow: "刚刚",
85
+ minutesAgo: "{n} 分钟前",
86
+ hoursAgo: "{n} 小时前",
87
+ daysAgo: "{n} 天前",
88
+ monthsAgo: "{n} 个月前",
89
+ yearsAgo: "{n} 年前",
90
+ },
91
+ notice: {
92
+ roomMissing: "会话不存在或未就绪",
93
+ roomError: "会话错误",
94
+ goalExtendFailed: "延长目标失败",
95
+ ccRoomOpenFailed: "cc 会话无法打开",
96
+ ccRoomObserving: "此 CC 会话当前为只读查看,消息未发送",
97
+ attachmentSendFailed: "图片发送失败:{error}",
98
+ },
99
+ permissionMode: {
100
+ default: "默认",
101
+ acceptEdits: "自动改",
102
+ bypassPermissions: "全放行",
103
+ defaultDesc: "每个工具调用都要你确认",
104
+ acceptEditsDesc: "自动放行文件编辑,其余仍确认",
105
+ bypassDesc: "跳过所有权限确认(危险)",
106
+ title: "选择权限模式",
107
+ confirmBypass: "全放行模式会跳过所有权限确认。确定吗?",
108
+ },
109
+ sessionList: {
110
+ title: "会话",
111
+ takeoverCount: "{count} 个可接管",
112
+ refreshAria: "刷新会话",
113
+ new: "新建",
114
+ createHint: "新会话默认使用当前目录",
115
+ currentProject: "当前项目 · {name}",
116
+ noProjectConversation: "无项目对话",
117
+ desktopCwd: "当前桌面目录",
118
+ unboundRepo: "不绑定 repo",
119
+ followsDesktopCwd: "跟随桌面当前 cwd",
120
+ otherProjects: "其他项目",
121
+ loading: "正在加载会话…",
122
+ empty: "还没有会话。点「新建」开一个,或在桌面端开始。",
123
+ automation: "自动",
124
+ noProjectPath: "无项目路径",
125
+ unreadAria: "有新内容",
126
+ },
127
+ status: {
128
+ conn: {
129
+ connecting: "连接中…",
130
+ authenticating: "认证中…",
131
+ unpaired: "未配对",
132
+ online: "在线",
133
+ offline: "已断开",
134
+ },
135
+ run: {
136
+ idle: "空闲",
137
+ running: "运行中",
138
+ waiting: "待审批",
139
+ completed: "已完成",
140
+ error: "出错",
141
+ },
142
+ },
143
+ storage: {
144
+ browserDevice: "{platform} 浏览器",
145
+ },
146
+ stream: {
147
+ showReasoning: "显示思考",
148
+ hideReasoning: "隐藏思考",
149
+ subagent: "子代理",
150
+ loading: "正在加载…",
151
+ generating: "正在生成回复",
152
+ emptyHint: "发个任务试试,或在侧栏打开一个 Claude Code 会话。",
153
+ },
154
+ tool: {
155
+ running: "运行中",
156
+ failed: "失败",
157
+ completed: "完成",
158
+ fallbackName: "操作",
159
+ truncated: "… (已截断)",
160
+ },
161
+ },
162
+ },
163
+ en: {
164
+ mobile: {
165
+ app: {
166
+ extendGoal: "Extend goal",
167
+ clearGoal: "Clear goal",
168
+ loadingCcSession: "Loading CC session…",
169
+ loadingSession: "Loading conversation…",
170
+ conversationFallback: "Conversation",
171
+ desktopSession: "Desktop session",
172
+ newSession: "New session",
173
+ openSessionsAria: "Open sessions",
174
+ leaveSessionAria: "Leave session",
175
+ deviceFallback: "Device",
176
+ logoutAria: "Log out",
177
+ permission: "Permission",
178
+ ccRoomObserving: "This session is read-only. Take it over explicitly on desktop before sending messages.",
179
+ },
180
+ approval: {
181
+ risk: {
182
+ low: "Low risk",
183
+ medium: "Medium risk",
184
+ high: "High risk",
185
+ },
186
+ readSourceSummary: "Read data source {source} / {scope} / {resource}",
187
+ question: "Question",
188
+ customPlaceholder: "Or enter a custom answer…",
189
+ sendCustom: "Send custom answer",
190
+ rememberScope: "Remember scope",
191
+ scope: {
192
+ once: "Once",
193
+ session: "This session",
194
+ project: "This project",
195
+ },
196
+ pathScopeLabel: "Path scope",
197
+ pathScope: {
198
+ file: "This file",
199
+ dir: "This directory",
200
+ tool: "This tool",
201
+ },
202
+ allow: "Allow",
203
+ reject: "Deny",
204
+ },
205
+ cc: {
206
+ title: "CC sessions",
207
+ subtitle: "External {label} sessions",
208
+ selectProjectFirst: "Select a project first.",
209
+ probingCli: "Checking {label} CLI…",
210
+ cliMissing: "{label} CLI was not found (it must be in PATH on the desktop machine).",
211
+ loadingSessions: "Loading cc sessions…",
212
+ empty: "No {label} sessions in this project.",
213
+ messageCount: "{count} messages",
214
+ },
215
+ sidePane: {
216
+ localTab: "Sessions",
217
+ ccTab: "CC",
218
+ },
219
+ composer: {
220
+ disconnected: "Disconnected",
221
+ placeholder: "Message…",
222
+ stop: "Stop",
223
+ send: "Send",
224
+ chooseImages: "Choose images",
225
+ takePhoto: "Take photo",
226
+ removeImage: "Remove image",
227
+ uploading: "Uploading…",
228
+ tooManyImages: "Up to 4 images can be sent per message",
229
+ unsupportedImage: "This image format is not supported",
230
+ sendFailed: "Could not send images; try again",
231
+ },
232
+ connection: {
233
+ connectingTitle: "Connecting…",
234
+ connectingBody: "Opening a channel to CodeShell",
235
+ authenticatingTitle: "Authenticating…",
236
+ authenticatingBody: "Verifying this device",
237
+ unpairedTitle: "Not paired",
238
+ unpairedBody: "Open Settings → Remote in CodeShell desktop, then scan the QR code or open the pairing link.",
239
+ offlineTitle: "Disconnected",
240
+ offlineBody: "Reconnecting automatically…",
241
+ },
242
+ format: {
243
+ noProject: "No project",
244
+ justNow: "Just now",
245
+ minutesAgo: "{n} min ago",
246
+ hoursAgo: "{n} hr ago",
247
+ daysAgo: "{n} days ago",
248
+ monthsAgo: "{n} mo ago",
249
+ yearsAgo: "{n} yr ago",
250
+ },
251
+ notice: {
252
+ roomMissing: "Session does not exist or is not ready",
253
+ roomError: "Session error",
254
+ goalExtendFailed: "Failed to extend goal",
255
+ ccRoomOpenFailed: "Could not open cc session",
256
+ ccRoomObserving: "This CC session is read-only; the message was not sent",
257
+ attachmentSendFailed: "Could not send images: {error}",
258
+ },
259
+ permissionMode: {
260
+ default: "Default",
261
+ acceptEdits: "Auto-edit",
262
+ bypassPermissions: "Allow all",
263
+ defaultDesc: "Confirm every tool call",
264
+ acceptEditsDesc: "Allow file edits automatically; confirm everything else",
265
+ bypassDesc: "Skip all permission confirmations (dangerous)",
266
+ title: "Choose permission mode",
267
+ confirmBypass: "Allow all mode skips every permission confirmation. Continue?",
268
+ },
269
+ sessionList: {
270
+ title: "Sessions",
271
+ takeoverCount: "{count} available",
272
+ refreshAria: "Refresh sessions",
273
+ new: "New",
274
+ createHint: "New sessions default to the current directory",
275
+ currentProject: "Current project · {name}",
276
+ noProjectConversation: "No-project conversation",
277
+ desktopCwd: "Current desktop directory",
278
+ unboundRepo: "Do not bind a repo",
279
+ followsDesktopCwd: "Follow desktop current cwd",
280
+ otherProjects: "Other projects",
281
+ loading: "Loading sessions…",
282
+ empty: "No sessions yet. Tap “New” to start one, or start from desktop.",
283
+ automation: "Automation",
284
+ noProjectPath: "No project path",
285
+ unreadAria: "New content",
286
+ },
287
+ status: {
288
+ conn: {
289
+ connecting: "Connecting…",
290
+ authenticating: "Authenticating…",
291
+ unpaired: "Not paired",
292
+ online: "Online",
293
+ offline: "Disconnected",
294
+ },
295
+ run: {
296
+ idle: "Idle",
297
+ running: "Running",
298
+ waiting: "Awaiting approval",
299
+ completed: "Completed",
300
+ error: "Error",
301
+ },
302
+ },
303
+ storage: {
304
+ browserDevice: "{platform} browser",
305
+ },
306
+ stream: {
307
+ showReasoning: "Show reasoning",
308
+ hideReasoning: "Hide reasoning",
309
+ subagent: "Subagent",
310
+ loading: "Loading…",
311
+ generating: "Generating response",
312
+ emptyHint: "Send a task, or open a Claude Code session from the sidebar.",
313
+ },
314
+ tool: {
315
+ running: "Running",
316
+ failed: "Failed",
317
+ completed: "Completed",
318
+ fallbackName: "Operation",
319
+ truncated: "… (truncated)",
320
+ },
321
+ },
322
+ },
323
+ };
@@ -0,0 +1,351 @@
1
+ /**
2
+ * Self-contained i18n for the web client logic layer.
3
+ *
4
+ * The dictionary is the `mobile` namespace (moved here from the desktop
5
+ * renderer's `i18n/ns/mobile.ts`; the renderer still spreads it into its own
6
+ * dict, so desktop `useT("mobile.*")` keys keep working). `lookup` /
7
+ * `interpolate` / the zh-fallback chain mirror the renderer's `translate.ts`
8
+ * exactly so a string renders identically on desktop and on the phone.
9
+ */
10
+ import type { UILanguage } from "../lib/uiLanguage.js";
11
+ /** Web-package dictionary: just the `mobile` namespace (zh is source of truth). */
12
+ export declare const webMessages: {
13
+ readonly zh: {
14
+ readonly mobile: {
15
+ readonly app: {
16
+ readonly extendGoal: "延长目标";
17
+ readonly clearGoal: "清除目标";
18
+ readonly loadingCcSession: "正在加载 CC 会话…";
19
+ readonly loadingSession: "正在加载会话…";
20
+ readonly conversationFallback: "对话";
21
+ readonly desktopSession: "桌面会话";
22
+ readonly newSession: "新会话";
23
+ readonly openSessionsAria: "打开会话";
24
+ readonly leaveSessionAria: "退出会话";
25
+ readonly deviceFallback: "设备";
26
+ readonly logoutAria: "退出登录";
27
+ readonly permission: "权限";
28
+ readonly ccRoomObserving: "此会话当前为只读查看;请在桌面端明确接管后再发送消息。";
29
+ };
30
+ readonly approval: {
31
+ readonly risk: {
32
+ readonly low: "低风险";
33
+ readonly medium: "中风险";
34
+ readonly high: "高风险";
35
+ };
36
+ readonly readSourceSummary: "读取数据源 {source} / {scope} / {resource}";
37
+ readonly question: "问题";
38
+ readonly customPlaceholder: "或输入自定义回答…";
39
+ readonly sendCustom: "发送自定义回答";
40
+ readonly rememberScope: "记住范围";
41
+ readonly scope: {
42
+ readonly once: "仅本次";
43
+ readonly session: "本会话";
44
+ readonly project: "本项目";
45
+ };
46
+ readonly pathScopeLabel: "路径范围";
47
+ readonly pathScope: {
48
+ readonly file: "此文件";
49
+ readonly dir: "此目录";
50
+ readonly tool: "此工具";
51
+ };
52
+ readonly allow: "允许";
53
+ readonly reject: "拒绝";
54
+ };
55
+ readonly cc: {
56
+ readonly title: "CC 会话";
57
+ readonly subtitle: "外部 {label} 会话";
58
+ readonly selectProjectFirst: "先选择一个项目。";
59
+ readonly probingCli: "正在检测 {label} CLI…";
60
+ readonly cliMissing: "未检测到 {label} CLI(需在桌面端机器的 PATH 中)。";
61
+ readonly loadingSessions: "正在加载 cc 会话…";
62
+ readonly empty: "该项目下没有 {label} 会话。";
63
+ readonly messageCount: "{count} 条";
64
+ };
65
+ readonly sidePane: {
66
+ readonly localTab: "会话";
67
+ readonly ccTab: "CC 会话";
68
+ };
69
+ readonly composer: {
70
+ readonly disconnected: "未连接";
71
+ readonly placeholder: "发消息…";
72
+ readonly stop: "停止";
73
+ readonly send: "发送";
74
+ readonly chooseImages: "从相册选择图片";
75
+ readonly takePhoto: "拍照";
76
+ readonly removeImage: "移除图片";
77
+ readonly uploading: "上传中…";
78
+ readonly tooManyImages: "每条消息最多发送 4 张图片";
79
+ readonly unsupportedImage: "不支持此图片格式";
80
+ readonly sendFailed: "图片发送失败,请重试";
81
+ };
82
+ readonly connection: {
83
+ readonly connectingTitle: "正在连接…";
84
+ readonly connectingBody: "与 CodeShell 建立通道";
85
+ readonly authenticatingTitle: "认证中…";
86
+ readonly authenticatingBody: "正在校验设备身份";
87
+ readonly unpairedTitle: "未配对";
88
+ readonly unpairedBody: "请在 CodeShell 桌面端打开「设置 → 远程」,扫码或打开配对链接。";
89
+ readonly offlineTitle: "连接断开";
90
+ readonly offlineBody: "正在自动重连…";
91
+ };
92
+ readonly format: {
93
+ readonly noProject: "无项目";
94
+ readonly justNow: "刚刚";
95
+ readonly minutesAgo: "{n} 分钟前";
96
+ readonly hoursAgo: "{n} 小时前";
97
+ readonly daysAgo: "{n} 天前";
98
+ readonly monthsAgo: "{n} 个月前";
99
+ readonly yearsAgo: "{n} 年前";
100
+ };
101
+ readonly notice: {
102
+ readonly roomMissing: "会话不存在或未就绪";
103
+ readonly roomError: "会话错误";
104
+ readonly goalExtendFailed: "延长目标失败";
105
+ readonly ccRoomOpenFailed: "cc 会话无法打开";
106
+ readonly ccRoomObserving: "此 CC 会话当前为只读查看,消息未发送";
107
+ readonly attachmentSendFailed: "图片发送失败:{error}";
108
+ };
109
+ readonly permissionMode: {
110
+ readonly default: "默认";
111
+ readonly acceptEdits: "自动改";
112
+ readonly bypassPermissions: "全放行";
113
+ readonly defaultDesc: "每个工具调用都要你确认";
114
+ readonly acceptEditsDesc: "自动放行文件编辑,其余仍确认";
115
+ readonly bypassDesc: "跳过所有权限确认(危险)";
116
+ readonly title: "选择权限模式";
117
+ readonly confirmBypass: "全放行模式会跳过所有权限确认。确定吗?";
118
+ };
119
+ readonly sessionList: {
120
+ readonly title: "会话";
121
+ readonly takeoverCount: "{count} 个可接管";
122
+ readonly refreshAria: "刷新会话";
123
+ readonly new: "新建";
124
+ readonly createHint: "新会话默认使用当前目录";
125
+ readonly currentProject: "当前项目 · {name}";
126
+ readonly noProjectConversation: "无项目对话";
127
+ readonly desktopCwd: "当前桌面目录";
128
+ readonly unboundRepo: "不绑定 repo";
129
+ readonly followsDesktopCwd: "跟随桌面当前 cwd";
130
+ readonly otherProjects: "其他项目";
131
+ readonly loading: "正在加载会话…";
132
+ readonly empty: "还没有会话。点「新建」开一个,或在桌面端开始。";
133
+ readonly automation: "自动";
134
+ readonly noProjectPath: "无项目路径";
135
+ readonly unreadAria: "有新内容";
136
+ };
137
+ readonly status: {
138
+ readonly conn: {
139
+ readonly connecting: "连接中…";
140
+ readonly authenticating: "认证中…";
141
+ readonly unpaired: "未配对";
142
+ readonly online: "在线";
143
+ readonly offline: "已断开";
144
+ };
145
+ readonly run: {
146
+ readonly idle: "空闲";
147
+ readonly running: "运行中";
148
+ readonly waiting: "待审批";
149
+ readonly completed: "已完成";
150
+ readonly error: "出错";
151
+ };
152
+ };
153
+ readonly storage: {
154
+ readonly browserDevice: "{platform} 浏览器";
155
+ };
156
+ readonly stream: {
157
+ readonly showReasoning: "显示思考";
158
+ readonly hideReasoning: "隐藏思考";
159
+ readonly subagent: "子代理";
160
+ readonly loading: "正在加载…";
161
+ readonly generating: "正在生成回复";
162
+ readonly emptyHint: "发个任务试试,或在侧栏打开一个 Claude Code 会话。";
163
+ };
164
+ readonly tool: {
165
+ readonly running: "运行中";
166
+ readonly failed: "失败";
167
+ readonly completed: "完成";
168
+ readonly fallbackName: "操作";
169
+ readonly truncated: "… (已截断)";
170
+ };
171
+ };
172
+ };
173
+ readonly en: {
174
+ readonly mobile: {
175
+ readonly app: {
176
+ readonly extendGoal: "Extend goal";
177
+ readonly clearGoal: "Clear goal";
178
+ readonly loadingCcSession: "Loading CC session…";
179
+ readonly loadingSession: "Loading conversation…";
180
+ readonly conversationFallback: "Conversation";
181
+ readonly desktopSession: "Desktop session";
182
+ readonly newSession: "New session";
183
+ readonly openSessionsAria: "Open sessions";
184
+ readonly leaveSessionAria: "Leave session";
185
+ readonly deviceFallback: "Device";
186
+ readonly logoutAria: "Log out";
187
+ readonly permission: "Permission";
188
+ readonly ccRoomObserving: "This session is read-only. Take it over explicitly on desktop before sending messages.";
189
+ };
190
+ readonly approval: {
191
+ readonly risk: {
192
+ readonly low: "Low risk";
193
+ readonly medium: "Medium risk";
194
+ readonly high: "High risk";
195
+ };
196
+ readonly readSourceSummary: "Read data source {source} / {scope} / {resource}";
197
+ readonly question: "Question";
198
+ readonly customPlaceholder: "Or enter a custom answer…";
199
+ readonly sendCustom: "Send custom answer";
200
+ readonly rememberScope: "Remember scope";
201
+ readonly scope: {
202
+ readonly once: "Once";
203
+ readonly session: "This session";
204
+ readonly project: "This project";
205
+ };
206
+ readonly pathScopeLabel: "Path scope";
207
+ readonly pathScope: {
208
+ readonly file: "This file";
209
+ readonly dir: "This directory";
210
+ readonly tool: "This tool";
211
+ };
212
+ readonly allow: "Allow";
213
+ readonly reject: "Deny";
214
+ };
215
+ readonly cc: {
216
+ readonly title: "CC sessions";
217
+ readonly subtitle: "External {label} sessions";
218
+ readonly selectProjectFirst: "Select a project first.";
219
+ readonly probingCli: "Checking {label} CLI…";
220
+ readonly cliMissing: "{label} CLI was not found (it must be in PATH on the desktop machine).";
221
+ readonly loadingSessions: "Loading cc sessions…";
222
+ readonly empty: "No {label} sessions in this project.";
223
+ readonly messageCount: "{count} messages";
224
+ };
225
+ readonly sidePane: {
226
+ readonly localTab: "Sessions";
227
+ readonly ccTab: "CC";
228
+ };
229
+ readonly composer: {
230
+ readonly disconnected: "Disconnected";
231
+ readonly placeholder: "Message…";
232
+ readonly stop: "Stop";
233
+ readonly send: "Send";
234
+ readonly chooseImages: "Choose images";
235
+ readonly takePhoto: "Take photo";
236
+ readonly removeImage: "Remove image";
237
+ readonly uploading: "Uploading…";
238
+ readonly tooManyImages: "Up to 4 images can be sent per message";
239
+ readonly unsupportedImage: "This image format is not supported";
240
+ readonly sendFailed: "Could not send images; try again";
241
+ };
242
+ readonly connection: {
243
+ readonly connectingTitle: "Connecting…";
244
+ readonly connectingBody: "Opening a channel to CodeShell";
245
+ readonly authenticatingTitle: "Authenticating…";
246
+ readonly authenticatingBody: "Verifying this device";
247
+ readonly unpairedTitle: "Not paired";
248
+ readonly unpairedBody: "Open Settings → Remote in CodeShell desktop, then scan the QR code or open the pairing link.";
249
+ readonly offlineTitle: "Disconnected";
250
+ readonly offlineBody: "Reconnecting automatically…";
251
+ };
252
+ readonly format: {
253
+ readonly noProject: "No project";
254
+ readonly justNow: "Just now";
255
+ readonly minutesAgo: "{n} min ago";
256
+ readonly hoursAgo: "{n} hr ago";
257
+ readonly daysAgo: "{n} days ago";
258
+ readonly monthsAgo: "{n} mo ago";
259
+ readonly yearsAgo: "{n} yr ago";
260
+ };
261
+ readonly notice: {
262
+ readonly roomMissing: "Session does not exist or is not ready";
263
+ readonly roomError: "Session error";
264
+ readonly goalExtendFailed: "Failed to extend goal";
265
+ readonly ccRoomOpenFailed: "Could not open cc session";
266
+ readonly ccRoomObserving: "This CC session is read-only; the message was not sent";
267
+ readonly attachmentSendFailed: "Could not send images: {error}";
268
+ };
269
+ readonly permissionMode: {
270
+ readonly default: "Default";
271
+ readonly acceptEdits: "Auto-edit";
272
+ readonly bypassPermissions: "Allow all";
273
+ readonly defaultDesc: "Confirm every tool call";
274
+ readonly acceptEditsDesc: "Allow file edits automatically; confirm everything else";
275
+ readonly bypassDesc: "Skip all permission confirmations (dangerous)";
276
+ readonly title: "Choose permission mode";
277
+ readonly confirmBypass: "Allow all mode skips every permission confirmation. Continue?";
278
+ };
279
+ readonly sessionList: {
280
+ readonly title: "Sessions";
281
+ readonly takeoverCount: "{count} available";
282
+ readonly refreshAria: "Refresh sessions";
283
+ readonly new: "New";
284
+ readonly createHint: "New sessions default to the current directory";
285
+ readonly currentProject: "Current project · {name}";
286
+ readonly noProjectConversation: "No-project conversation";
287
+ readonly desktopCwd: "Current desktop directory";
288
+ readonly unboundRepo: "Do not bind a repo";
289
+ readonly followsDesktopCwd: "Follow desktop current cwd";
290
+ readonly otherProjects: "Other projects";
291
+ readonly loading: "Loading sessions…";
292
+ readonly empty: "No sessions yet. Tap “New” to start one, or start from desktop.";
293
+ readonly automation: "Automation";
294
+ readonly noProjectPath: "No project path";
295
+ readonly unreadAria: "New content";
296
+ };
297
+ readonly status: {
298
+ readonly conn: {
299
+ readonly connecting: "Connecting…";
300
+ readonly authenticating: "Authenticating…";
301
+ readonly unpaired: "Not paired";
302
+ readonly online: "Online";
303
+ readonly offline: "Disconnected";
304
+ };
305
+ readonly run: {
306
+ readonly idle: "Idle";
307
+ readonly running: "Running";
308
+ readonly waiting: "Awaiting approval";
309
+ readonly completed: "Completed";
310
+ readonly error: "Error";
311
+ };
312
+ };
313
+ readonly storage: {
314
+ readonly browserDevice: "{platform} browser";
315
+ };
316
+ readonly stream: {
317
+ readonly showReasoning: "Show reasoning";
318
+ readonly hideReasoning: "Hide reasoning";
319
+ readonly subagent: "Subagent";
320
+ readonly loading: "Loading…";
321
+ readonly generating: "Generating response";
322
+ readonly emptyHint: "Send a task, or open a Claude Code session from the sidebar.";
323
+ };
324
+ readonly tool: {
325
+ readonly running: "Running";
326
+ readonly failed: "Failed";
327
+ readonly completed: "Completed";
328
+ readonly fallbackName: "Operation";
329
+ readonly truncated: "… (truncated)";
330
+ };
331
+ };
332
+ };
333
+ };
334
+ type Dict = Record<string, unknown>;
335
+ type DottedKeys<T extends Dict, Prefix extends string = ""> = {
336
+ [K in keyof T & string]: T[K] extends Dict ? DottedKeys<T[K], `${Prefix}${K}.`> : `${Prefix}${K}`;
337
+ }[keyof T & string];
338
+ /** Type-safe union of every translation key in the web dict. */
339
+ export type WebTranslationKey = DottedKeys<typeof webMessages.zh>;
340
+ export type WebTranslateParams = Record<string, string | number>;
341
+ /**
342
+ * Resolve a translation key for `lang`. Fallback chain:
343
+ * 1. the requested language,
344
+ * 2. Chinese (zh) — the source-of-truth tree,
345
+ * 3. the raw key string itself (so missing keys are visible, never blank).
346
+ * Then `{name}`-style placeholders are interpolated.
347
+ */
348
+ export declare function translate(lang: UILanguage, key: WebTranslationKey | string, params?: WebTranslateParams): string;
349
+ /** Translate with the persisted UI language (localStorage; defaults to zh). */
350
+ export declare function t(key: WebTranslationKey | string, params?: WebTranslateParams): string;
351
+ export {};