scream-code 0.19.2 → 0.19.3

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.
@@ -133,7 +133,14 @@ const dictionaries = {
133
133
  "status.awaiting_approval": "等待批准",
134
134
  "status.awaiting_answer": "等待回答",
135
135
  "status.reconnecting_short": "重连中 {attempt}/{max}",
136
- "status.reconnecting_detail": "重连中 {attempt}/{max} · {reason} · {delay}s 后重试",
136
+ "status.collab_request": "🤝 {name} 求助:{issue}",
137
+ "status.collab_request_bare": "🤝 {name} 求助",
138
+ "status.collab_handled": "✓ Scream 已处理 {name} 的请求",
139
+ "status.cron_fired": "⏰ 定时任务已触发:{preview}",
140
+ "status.cron_fired_coalesced": "⏰ 定时任务已触发(合并 {count} 次):{preview}",
141
+ "status.cron_once": "⏰ 一次性提醒已触发:{preview}",
142
+ "status.cron_stale": "⚠️ 定时任务已过期,仍触发:{preview}",
143
+ "status.reconnecting_detail": "⚠️ 重连中 {attempt}/{max}:{reason} · {delay}s",
137
144
  "status.reason_rate_limit": "限流",
138
145
  "status.reason_server": "服务器错误",
139
146
  "status.reason_timeout": "网络超时",
@@ -196,23 +203,12 @@ const dictionaries = {
196
203
  "error.internal": "内部错误",
197
204
  "error.no_session": "没有活跃的会话。",
198
205
  "error.session_header_hint": "请在 config.toml 对应服务商下设置 session_header = \"{name}\",以提供网关要求的会话标识。",
199
- "footer.shift_tab": "shift+tab: 计划模式",
200
- "footer.model": "/model: 切换模型",
201
- "footer.ctrl_s": "ctrl+s: 中途干预",
202
- "footer.compact": "/compact: 压缩上下文",
203
- "footer.ctrl_o": "ctrl+o: 展开/收起最新详情",
204
- "footer.tasks": "/tasks: 后台任务",
205
- "footer.shift_enter": "shift+enter: 换行",
206
- "footer.init": "/init: 生成 AGENTS.md",
207
- "footer.at": "@: 提及文件",
208
- "footer.ctrl_c": "ctrl+c: 取消",
209
- "footer.skill": "/skill: 打开 Skill 中心",
210
- "footer.help": "/help: 显示命令",
211
- "footer.config": "/config: 选择并配置你常用的模型商",
212
- "footer.reminder": "让 Scream 安排任务,例如 \"2个小时后提醒我去拿快递\"",
213
- "footer.context": "上下文: {bar} ({tokens}/{maxTokens})",
214
- "footer.context_short": "上下文: {bar}",
215
- "footer.hit": "HitR",
206
+ "footer.context": "📨 Context:{bar} {percent}",
207
+ "footer.context_plain": "📨 Context:{percent}",
208
+ "footer.hit": "Hitr",
209
+ "footer.git_label": "📁 工作区Git",
210
+ "footer.line_status": "Line: {status}",
211
+ "footer.line_disconnected": "未连接",
216
212
  "footer.tasks_running": "后台任务 x{count}",
217
213
  "footer.agents_running": "后台Agent x{count}",
218
214
  "footer.subagents_working": "前台Agent x{count}",
@@ -449,42 +445,93 @@ const dictionaries = {
449
445
  "mcp.uninstall_failed": "卸载失败: {msg}",
450
446
  "mcp.footer_hint": "Enter 安装/启停 d 卸载 Esc 返回",
451
447
  "mcp.macos_only": "仅支持 macOS",
452
- "cc.start": "启动",
453
- "cc.stop": "关闭",
454
- "cc.restart": "重启",
455
- "cc.uninstall": "卸载",
456
- "cc.start_desc": "启动 cc-connect 后台守护进程",
457
- "cc.stop_desc": "停止 cc-connect 后台守护进程",
458
- "cc.restart_desc": "重启 cc-connect 后台守护进程",
459
- "cc.uninstall_desc": "彻底卸载 cc-connect(守护进程 + 配置 + npm 包)",
460
- "cc.manage_title": "cc-connect 守护进程管理",
461
- "cc.operating": "正在{label}cc-connect...",
462
- "cc.started": "cc-connect 已{label}",
463
- "cc.start_failed": "{label}失败:{output}",
464
- "cc.will_clean": "将执行以下清理:",
465
- "cc.clean_daemon": "· 停止并卸载 {label} 守护进程",
466
- "cc.clean_config": "· 删除配置目录{detail}",
467
- "cc.current_version": "· 当前版本:{version}",
468
- "cc.install_path": "· 安装路径:{path}",
469
- "cc.clean_pm2": "· 删除 pm2 进程 + 启动项(startup.bat / schtasks)",
470
- "cc.clean_residual": "· 清理 {count} 个残留文件(launchd/systemd/pm2 日志)",
471
- "cc.not_detected": "未识别 cc-connect 安装",
472
- "cc.not_detected_desc": "未在默认 npm 全局路径下检测到 cc-connect 安装,已中止卸载。建议将此情况发送给 scream,由其指导手动清理。",
473
- "cc.uninstalling": "正在卸载 cc-connect…",
474
- "cc.stop_daemon": "停止守护进程",
475
- "cc.delete_label": "删除",
476
- "cc.clean_files": "清理残留文件",
477
- "cc.uninstall_done": "cc-connect 已彻底卸载",
478
- "cc.uninstall_partial": "部分步骤失败,详见下方提示",
479
- "cc.uninstalled": "cc-connect 已卸载",
480
- "cc.restart_hint": "建议重启 Scream Code 以确保 cc-connect 状态完全清空。",
481
- "cc.uninstall_partial_label": "卸载部分失败",
482
- "cc.residual": "残留",
483
- "cc.confirm_uninstall": "确认彻底卸载 cc-connect?",
484
- "cc.uninstall_irreversible": "此操作不可撤销,所有 cc-connect 数据将被清除",
485
- "cc.confirm_uninstall_btn": "确认卸载",
486
- "cc.uninstall_step_npm": "· 执行 npm uninstall -g cc-connect",
487
- "cc.unknown_error": "未知错误",
448
+ "line.title": "原生 IM 通道",
449
+ "line.picker_hint": "配置向导 / 启停守护进程 / 卸载",
450
+ "line.state_running": "运行中(pid {pid})",
451
+ "line.state_stopped": "未运行",
452
+ "line.opt_wizard": "配置飞书(向导)",
453
+ "line.opt_wizard_desc": "傻瓜式教程:创建应用 → 粘贴凭证 → 校验 → 启动",
454
+ "line.opt_start_desc": "后台启动 line 守护进程",
455
+ "line.opt_stop_desc": "停止 line 守护进程",
456
+ "line.opt_restart_desc": "重启 line 守护进程",
457
+ "line.opt_uninstall": "卸载",
458
+ "line.opt_uninstall_desc": "停止守护进程并删除 ~/.scream-code/line",
459
+ "line.wizard_title": "配置飞书通道",
460
+ "line.wizard_hint": "跟着向导创建飞书应用(约 3 分钟),或直接粘贴已有凭证",
461
+ "line.opt_guided": "跟着向导创建应用(推荐)",
462
+ "line.opt_guided_desc": "分步引导:创建应用 → 开权限 → 长连接 → 发布 → 粘贴凭证",
463
+ "line.fs_wizard_title": "飞书应用创建向导",
464
+ "line.fs_step_title": "第 {n} 步,共 {total} 步",
465
+ "line.fs_next": "已完成,下一步",
466
+ "line.fs_later": "随时可退出,运行 /line 从当前步骤继续",
467
+ "line.fs_goto_credentials": "去粘贴凭证",
468
+ "line.fs_step1": "① 创建应用\n\n1. 打开 https://open.feishu.cn/app 并登录(个人账号也可以)\n2. 进入「控制台」→ 点击「创建企业自建应用」\n3. 名称随意(如 scream),描述可留空",
469
+ "line.fs_step2": "② 启用机器人\n\n应用详情页 → 左侧「应用能力」→ 添加并启用「机器人」(名称、描述随意)",
470
+ "line.fs_step3": "③ 开通权限\n\n左侧「权限管理」→ 逐个搜索并开通:\n· contact:user.base:readonly(获取用户信息)\n· im:message.group_at_msg:readonly(群聊 @ 机器人)\n· im:message.p2p_msg:readonly(私聊消息)\n· im:message:send_as_bot(以应用身份发消息)\n可选:im:message.group_msg(读取群内全部消息;不开则群聊仅响应 @机器人)",
471
+ "line.fs_step4": "④ 配置事件订阅(长连接,无需公网 IP)\n\n左侧「事件与回调」→\n· 事件配置:订阅方式选「使用长连接接收事件」→ 添加事件 im.message.receive_v1(接收消息)\n· 回调配置:订阅方式同样选「使用长连接接收事件」",
472
+ "line.fs_step5": "⑤ 发布应用\n\n左侧「版本管理与发布」→ 创建版本 → 申请发布(企业自建应用管理员即可通过)",
473
+ "line.fs_step6": "⑥ 获取凭证\n\n左侧「凭证与基础信息」→ 复制 App ID(cli_ 开头)与 App Secret。\n\n下一步把它们粘贴给向导即可完成配置。",
474
+ "line.opt_manual": "手动输入凭证",
475
+ "line.opt_manual_desc": "粘贴飞书应用的 App ID 与 App Secret",
476
+ "line.opt_tutorial": "查看配置教程",
477
+ "line.opt_tutorial_desc": "从零创建飞书应用的步骤",
478
+ "line.tutorial_title": "飞书应用配置教程",
479
+ "line.tutorial": "① 打开 open.feishu.cn → 控制台 →「创建企业自建应用」(个人账号也可以)\n② 应用详情 →「添加应用能力」→ 开通「机器人」\n③「权限管理」→ 开通 im:message 相关权限(接收与发送消息)\n④「事件与回调」→ 订阅方式选择「使用长连接接收事件」(无需公网 IP)\n⑤「版本管理与发布」→ 创建版本并发布\n⑥「凭证与基础信息」→ 复制 App ID(cli_…)与 App Secret\n\n完成后重新运行 /line,选择「手动输入凭证」粘贴即可。",
480
+ "line.input_appid": "输入 App ID",
481
+ "line.input_secret": "输入 App Secret",
482
+ "line.validating": "正在校验飞书凭证…",
483
+ "line.config_saved": "配置已保存",
484
+ "line.ask_start": "配置完成,立即启动守护进程?",
485
+ "line.opt_start_now": "立即启动",
486
+ "line.opt_start_now_desc": "后台拉起守护进程,之后在飞书里直接发消息即可",
487
+ "line.not_configured": "尚未配置任何平台(飞书/微信),请先运行配置向导。",
488
+ "line.starting": "正在启动守护进程…",
489
+ "line.started": "line 守护进程已启动(pid {pid})",
490
+ "line.already_running": "line 守护进程已在运行(pid {pid})",
491
+ "line.start_failed": "启动失败:{error}",
492
+ "line.stopping": "正在停止守护进程…",
493
+ "line.stopped": "line 守护进程已停止。",
494
+ "line.not_running": "line 守护进程未在运行。",
495
+ "line.restarting": "正在重启守护进程…",
496
+ "line.config_broken": "line 配置文件有问题",
497
+ "line.confirm_uninstall": "确认卸载 line 通道?",
498
+ "line.uninstall_irreversible": "此操作不可撤销;仅删除 line 配置与日志",
499
+ "line.confirm_uninstall_btn": "卸载",
500
+ "line.will_clean": "停止守护进程并删除 ~/.scream-code/line(配置与日志)",
501
+ "line.uninstalling": "正在卸载 line 通道…",
502
+ "line.uninstalled": "line 通道已卸载",
503
+ "line.uninstall_note": "随时可用 /line 重新配置。",
504
+ "line.uninstall_failed": "卸载失败:{error}",
505
+ "registry.line_desc": "飞书/微信原生通道(配置向导 / 守护进程)",
506
+ "line.opt_wizard_weixin": "配置微信(向导)",
507
+ "line.opt_wizard_weixin_desc": "官方 ilink 机器人接口,粘贴 token 即可",
508
+ "line.weixin_wizard_title": "配置微信通道",
509
+ "line.weixin_wizard_hint": "选择配置方式",
510
+ "line.weixin_opt_qr": "扫码登录(推荐)",
511
+ "line.weixin_opt_qr_desc": "终端显示登录链接,手机微信打开确认即可,全程无需其他工具",
512
+ "line.weixin_qr_begin": "正在获取微信登录链接…",
513
+ "line.weixin_qr_title": "微信扫码登录",
514
+ "line.weixin_qr_notice": "请完成微信登录:\n\n1. 复制下面的链接\n2. 在手机微信中打开该链接(或用微信「扫一扫」识别)\n3. 在手机上确认登录\n\n{url}\n\n确认后向导会自动获取 token 并写入配置(最多等待 8 分钟)。",
515
+ "line.weixin_qr_waiting": "等待微信确认登录…(最多 8 分钟)",
516
+ "line.weixin_qr_confirmed": "登录成功,token 已获取",
517
+ "line.weixin_qr_failed": "扫码登录失败:{error}",
518
+ "line.weixin_qr_timeout": "等待超时:未在 8 分钟内确认登录,请重新发起扫码。",
519
+ "line.weixin_allow_from_note": "已自动把你的微信 ID 加入 allow_from 白名单(可编辑配置文件调整):",
520
+ "line.weixin_tutorial_title": "微信通道教程",
521
+ "line.weixin_tutorial": "微信通道使用微信官方 ilink 机器人网关(无需公网 IP、无需任何第三方工具)。\n\n完整流程(约 1 分钟):\n① 运行 /line → 选「配置微信(向导)」→ 选「扫码登录(推荐)」\n② 终端显示一个登录链接 → 复制并在手机微信中打开(或用微信「扫一扫」识别)\n③ 在手机上确认登录 → token 自动写入配置,你的微信 ID 自动加入 allow_from 白名单\n④ 回到 /line → 选「启动」→ footer 出现绿色 ◆\n⑤ 用微信给机器人发一条消息 → 完成会话激活,之后即可随时对话\n\n白名单:allow_from 未配置时任何私聊用户都能触发你的模型计费;扫码登录会自动填入你自己的 ID,如需给同事开放,编辑 ~/.scream-code/line/config.json 追加(多个用英文逗号分隔,形如 xxx@im.wechat)。\n\n已有现成 token(运营商提供)→ 选「手动输入 token」直接粘贴。",
522
+ "line.weixin_opt_manual": "手动输入 token",
523
+ "line.weixin_opt_manual_desc": "粘贴 ilink bot Bearer token",
524
+ "line.weixin_opt_tutorial": "查看微信教程",
525
+ "line.weixin_opt_tutorial_desc": "完整流程说明(扫码/白名单/激活)",
526
+ "line.weixin_input_token": "输入 ilink bot token",
527
+ "line.weixin_validating": "正在校验微信 token…",
528
+ "line.weixin_session_expired": "token 有效,会话待激活",
529
+ "line.weixin_session_expired_hint": "启动守护进程后,用允许的微信账号给机器人发一条消息即可完成会话激活。",
530
+ "line.weixin_config_saved": "微信配置已保存",
531
+ "line.platform_taken": "line 是单通道设计",
532
+ "line.platform_taken_detail": "当前已配置{taken}通道,请先运行 /line → 卸载,再配置另一个平台。",
533
+ "line.channel_feishu": "飞书",
534
+ "line.channel_weixin": "微信",
488
535
  "auth.fetching_models": "正在拉取最新模型目录...",
489
536
  "auth.catalog_fetch_failed": "拉取远程模型目录失败: {error}。请检查网络(目录站点在你的网络环境下可能无法访问)后重试,或使用 /config diy 自行配置服务商。",
490
537
  "auth.no_providers": "没有已配置的模型商。",
@@ -594,7 +641,7 @@ const dictionaries = {
594
641
  "session.title": "会话",
595
642
  "session.loading": "正在加载会话...",
596
643
  "session_picker.empty": "未找到会话。按 Escape 关闭。",
597
- "session_picker.cc_restricted": "CC专属会话不支持切换或删除,请点击或复制下方文件路径进入手动管理",
644
+ "session_picker.cc_restricted": "通道会话不支持切换或删除,请点击或复制下方文件路径进入手动管理",
598
645
  "session_picker.batch_delete_confirm": "删除选中的 {count} 个会话?",
599
646
  "session_picker.batch_delete_hint": " 按 Enter 确认批量删除,Esc 取消",
600
647
  "session_picker.batch_delete_unavailable": "此处不支持批量删除。",
@@ -1052,16 +1099,6 @@ const dictionaries = {
1052
1099
  "transcript.tool_name": "工具 {name}:",
1053
1100
  "transcript.activated_skill": "已激活插件:{name}",
1054
1101
  "transcript.more_history": "↑ 还有 {count} 条历史消息",
1055
- "transcript.child_request": "{name} 向主 Agent 求助({type})",
1056
- "transcript.child_request_anon": "子代理向主 Agent 求助({type})",
1057
- "transcript.child_request_type_info": "补充信息",
1058
- "transcript.child_request_type_handoff": "转交工作",
1059
- "transcript.child_request_type_escalate": "上报决策",
1060
- "transcript.child_request_needs": "需要 {value}",
1061
- "transcript.child_request_expecting": "期望 {value}",
1062
- "transcript.child_request_artifacts": "产出 {value}",
1063
- "transcript.child_request_evidence": "证据 {value}",
1064
- "transcript.child_request_missing": "缺项 {value}",
1065
1102
  "compaction.done": "压缩完成",
1066
1103
  "compaction.canceled": "压缩已取消",
1067
1104
  "compaction.in_progress": "正在压缩上下文...",
@@ -1100,9 +1137,9 @@ const dictionaries = {
1100
1137
  "tc.rejected": "已拒绝",
1101
1138
  "tc.cancelled": "已取消",
1102
1139
  "tc.error_prefix": "错误:",
1103
- "dialog.cc_session_connected": "已连接 CC 会话 ({id})。",
1140
+ "dialog.cc_session_connected": "已连接通道会话({id})。",
1104
1141
  "dialog.create_session_failed": "创建会话失败",
1105
- "dialog.cc_managed": "CC 会话由 cc-connect 管理,请在聊天通道中操作。",
1142
+ "dialog.cc_managed": "该会话由 IM 通道管理,请在聊天应用里操作,或停止对应通道后删除。",
1106
1143
  "dialog.memo_injected": "已注入备忘录 #{id}",
1107
1144
  "dialog.approval_title": "Scream Code 需要审批",
1108
1145
  "dialog.question_title": "Scream Code 需要您的回答",
@@ -1142,46 +1179,6 @@ const dictionaries = {
1142
1179
  "thinking.more_lines": "...(还有 {count} 行,按 ctrl+o 展开)",
1143
1180
  "tool.more_lines": "...(还有 {count} 行)",
1144
1181
  "shell.more_lines": "...(还有 {count} 行,按 ctrl+o 展开)",
1145
- "ccconnect.note_botfather": "需先在 @BotFather 创建 bot",
1146
- "ccconnect.note_napcat": "需要 NapCat/OneBot",
1147
- "ccconnect.note_wecom": "需要公网 IP",
1148
- "ccconnect.note_matrix": "E2EE 加密,需 homeserver + access token",
1149
- "ccconnect.note_webex": "需在 developer.webex.com 创建 Bot",
1150
- "ccconnect.note_max": "需通过 @MasterBot 创建 bot",
1151
- "ccconnect.note_googlechat": "需 GCP 服务账号 JSON",
1152
- "ccconnect.note_cloud_web": "自建 IM 网关",
1153
- "ccconnect.note_yuanbao": "腾讯元宝,需 app-key:app-secret",
1154
- "ccconnect.note_tuitui": "需 app_id + app_secret",
1155
- "ccconnect.note_wps_agentspace": "需 app_id + wps_sid",
1156
- "ccconnect.new_platform_version_hint": "⚠ 该平台需要 cc-connect v1.5.0 及以上,请先更新 cc-connect",
1157
- "ccconnect.config_comment_attachment": "# 全局:允许/禁止图片和文件回传到聊天(on = 开启,off = 关闭)",
1158
- "ccconnect.reconfigured": "{name} 已配置(配置不会丢失)",
1159
- "ccconnect.config_path": "配置文件:{path}",
1160
- "ccconnect.config_done": "✔ {name} 通道配置完成",
1161
- "ccconnect.config_written": "配置文件已写入:{path}",
1162
- "ccconnect.quick_ref": "📋 常用管理指令(建议复制保存):",
1163
- "ccconnect.pm2_status": " pm2 status 查看运行状态(online = 正常)",
1164
- "ccconnect.pm2_restart": " pm2 restart cc-connect 重启服务",
1165
- "ccconnect.pm2_stop": " pm2 stop cc-connect 停止服务",
1166
- "ccconnect.pm2_logs": " pm2 logs cc-connect 查看日志",
1167
- "ccconnect.pm2_delete": " pm2 delete cc-connect 完全删除",
1168
- "ccconnect.reconfigure_warning": " ⚠ 不要再次运行 /cc-connect 并选择相同平台,否则会覆盖已有配置!",
1169
- "ccconnect.reconfigure_change": " 如需更换平台,请先删除 C:\\Users\\<用户名>\\.cc-connect\\config.toml",
1170
- "ccconnect.init_steps": "📋 初始化步骤(仅首次配置时需要,按顺序执行):",
1171
- "ccconnect.step_platform_auth": " 第 1 步:平台认证{note}",
1172
- "ccconnect.once_tag": "(一次性)",
1173
- "ccconnect.step_n": " 第 {num} 步:{label}{once}",
1174
- "ccconnect.auto_done": " ✅ 已自动完成,无需手动操作 ({command})",
1175
- "ccconnect.more_commands": "更多指令 ({method}):",
1176
- "ccconnect.attachment_hint": "💡 激活附件回传(让 Agent 能发图片和文件):",
1177
- "ccconnect.bind_setup": " 在聊天窗口发送 /bind setup",
1178
- "ccconnect.autostart_hint": "💡 开机自启已通过 Startup 文件夹中的 cc-connect-startup.bat 实现。",
1179
- "ccconnect.manual_restart": " 如需手动重启服务:pm2 resurrect",
1180
- "ccconnect.not_installed": "cc-connect 未安装",
1181
- "ccconnect.install_guide": "请先在终端运行:\n\n npm install -g cc-connect\n\n安装完成后重新输入 /cc-connect 配置平台。",
1182
- "ccconnect.already_configured": "{name} ✔ 已配置",
1183
- "ccconnect.picker_title": "cc-connect 快速通道配置",
1184
- "ccconnect.picker_hint": "选择要连接的平台,配置将自动写入 ~/.cc-connect/config.toml",
1185
1182
  "market.humanizer_name": "Humanizer AI 文本去味",
1186
1183
  "market.humanizer_desc": "去除 AI 写作痕迹:30 种 AI 模式检测 × 5 大类 × 语音校准,输出纯正人类文风",
1187
1184
  "market.contract_name": "Contract Review Pro 合同审查",
@@ -1277,7 +1274,6 @@ const dictionaries = {
1277
1274
  "knowledge.ingest_summary": "总计: {chunks} chunks, {events} events, {entities} entities",
1278
1275
  "knowledge.empty_store": "知识库为空,请先用 /knowledge 摄入文档",
1279
1276
  "knowledge.web_opened": "知识图谱已打开: {url}",
1280
- "cc.clean_config.detail": " ~/.cc-connect(含会话记录、配置、日志)",
1281
1277
  "registry.auto_desc": "切换自动权限模式",
1282
1278
  "registry.yolo_desc": "切换至自动批准模式(yolo)",
1283
1279
  "registry.bot_desc": "切换无人值守 Bot 模式(bot)",
@@ -1406,8 +1402,6 @@ const dictionaries = {
1406
1402
  "registry.mcp_desc": "管理 MCP 服务器(安装/停用/卸载)",
1407
1403
  "registry.plugin_desc": "插件中心,管理插件,含激活、安装、卸载等",
1408
1404
  "registry.extension_desc": "代码扩展,激活或停用插件入口",
1409
- "registry.cc_desc": "操控你的cc(启动/关闭/重启)",
1410
- "registry.cc_connect_desc": "cc-connect 快速通道配置(需先安装)",
1411
1405
  "registry.revoke_desc": "撤回上一次对话(可指定轮数,如 /revoke 3)",
1412
1406
  "registry.fork_desc": "复制当前会话并新开分支",
1413
1407
  "registry.title_desc": "设置或显示会话标题",
@@ -1516,7 +1510,14 @@ const dictionaries = {
1516
1510
  "status.awaiting_approval": "Awaiting approval",
1517
1511
  "status.awaiting_answer": "Awaiting answer",
1518
1512
  "status.reconnecting_short": "Retrying {attempt}/{max}",
1519
- "status.reconnecting_detail": "Reconnecting {attempt}/{max} · {reason} · retry in {delay}s",
1513
+ "status.collab_request": "🤝 {name} needs help: {issue}",
1514
+ "status.collab_request_bare": "🤝 {name} needs help",
1515
+ "status.collab_handled": "✓ Scream handled the request from {name}",
1516
+ "status.cron_fired": "⏰ Scheduled task fired: {preview}",
1517
+ "status.cron_fired_coalesced": "⏰ Scheduled task fired ({count} runs merged): {preview}",
1518
+ "status.cron_once": "⏰ One-time reminder fired: {preview}",
1519
+ "status.cron_stale": "⚠️ Scheduled task expired, fired anyway: {preview}",
1520
+ "status.reconnecting_detail": "⚠️ Reconnecting {attempt}/{max}: {reason} · {delay}s",
1520
1521
  "status.reason_rate_limit": "rate limited",
1521
1522
  "status.reason_server": "server error",
1522
1523
  "status.reason_timeout": "network timeout",
@@ -1579,23 +1580,12 @@ const dictionaries = {
1579
1580
  "error.internal": "Internal error",
1580
1581
  "error.no_session": "No active session.",
1581
1582
  "error.session_header_hint": "Set session_header = \"{name}\" under this provider in config.toml to supply the required session id.",
1582
- "footer.shift_tab": "shift+tab: Plan mode",
1583
- "footer.model": "/model: Switch model",
1584
- "footer.ctrl_s": "ctrl+s: Interrupt",
1585
- "footer.compact": "/compact: Compress context",
1586
- "footer.ctrl_o": "ctrl+o: Expand/collapse the latest detail",
1587
- "footer.tasks": "/tasks: Background tasks",
1588
- "footer.shift_enter": "shift+enter: New line",
1589
- "footer.init": "/init: Generate AGENTS.md",
1590
- "footer.at": "@: Mention files",
1591
- "footer.ctrl_c": "ctrl+c: Cancel",
1592
- "footer.skill": "/skill: Skill center",
1593
- "footer.help": "/help: Show commands",
1594
- "footer.config": "/config: Configure your model provider",
1595
- "footer.reminder": "Let Scream schedule tasks, e.g. \"remind me to pick up the package in 2 hours\"",
1596
- "footer.context": "Context: {bar} ({tokens}/{maxTokens})",
1597
- "footer.context_short": "Context: {bar}",
1598
- "footer.hit": "HitR",
1583
+ "footer.context": "📨 Context:{bar} {percent}",
1584
+ "footer.context_plain": "📨 Context:{percent}",
1585
+ "footer.hit": "Hitr",
1586
+ "footer.git_label": "📁 Workspace Git",
1587
+ "footer.line_status": "Line: {status}",
1588
+ "footer.line_disconnected": "Disconnected",
1599
1589
  "footer.tasks_running": "bg task x{count}",
1600
1590
  "footer.agents_running": "bg agent x{count}",
1601
1591
  "footer.subagents_working": "fg agent x{count}",
@@ -1832,42 +1822,93 @@ const dictionaries = {
1832
1822
  "mcp.uninstall_failed": "Uninstall failed: {msg}",
1833
1823
  "mcp.footer_hint": "Enter install/toggle d uninstall Esc back",
1834
1824
  "mcp.macos_only": "macOS only",
1835
- "cc.start": "Start",
1836
- "cc.stop": "Stop",
1837
- "cc.restart": "Restart",
1838
- "cc.uninstall": "Uninstall",
1839
- "cc.start_desc": "Start cc-connect daemon",
1840
- "cc.stop_desc": "Stop cc-connect daemon",
1841
- "cc.restart_desc": "Restart cc-connect daemon",
1842
- "cc.uninstall_desc": "Completely uninstall cc-connect (daemon + config + npm package)",
1843
- "cc.manage_title": "cc-connect Daemon Management",
1844
- "cc.operating": "{label} cc-connect...",
1845
- "cc.started": "cc-connect {label}",
1846
- "cc.start_failed": "{label} failed: {output}",
1847
- "cc.will_clean": "The following will be cleaned up:",
1848
- "cc.clean_daemon": "· Stop and uninstall {label} daemon",
1849
- "cc.clean_config": "· Delete config directory{detail}",
1850
- "cc.current_version": "· Current version: {version}",
1851
- "cc.install_path": "· Install path: {path}",
1852
- "cc.clean_pm2": "· Remove pm2 process + startup items (startup.bat / schtasks)",
1853
- "cc.clean_residual": "· Clean {count} residual files (launchd/systemd/pm2 logs)",
1854
- "cc.not_detected": "cc-connect installation not detected",
1855
- "cc.not_detected_desc": "cc-connect was not detected at the default npm global path. Uninstall aborted. Please report this to scream for manual cleanup guidance.",
1856
- "cc.uninstalling": "Uninstalling cc-connect…",
1857
- "cc.stop_daemon": "Stop daemon",
1858
- "cc.delete_label": "Delete",
1859
- "cc.clean_files": "Clean residual files",
1860
- "cc.uninstall_done": "cc-connect completely uninstalled",
1861
- "cc.uninstall_partial": "Some steps failed, see details below",
1862
- "cc.uninstalled": "cc-connect uninstalled",
1863
- "cc.restart_hint": "Restart Scream Code to ensure cc-connect state is fully cleared.",
1864
- "cc.uninstall_partial_label": "Uninstall partially failed",
1865
- "cc.residual": "Residual",
1866
- "cc.confirm_uninstall": "Completely uninstall cc-connect?",
1867
- "cc.uninstall_irreversible": "This cannot be undone. All cc-connect data will be removed.",
1868
- "cc.confirm_uninstall_btn": "Confirm Uninstall",
1869
- "cc.uninstall_step_npm": "· Run npm uninstall -g cc-connect",
1870
- "cc.unknown_error": "Unknown error",
1825
+ "line.title": "Native IM Channels",
1826
+ "line.picker_hint": "Wizard / daemon lifecycle / uninstall",
1827
+ "line.state_running": "running (pid {pid})",
1828
+ "line.state_stopped": "not running",
1829
+ "line.opt_wizard": "Configure Feishu (wizard)",
1830
+ "line.opt_wizard_desc": "Guided setup: create app → paste credentials → verify → start",
1831
+ "line.opt_start_desc": "Start the line daemon in the background",
1832
+ "line.opt_stop_desc": "Stop the line daemon",
1833
+ "line.opt_restart_desc": "Restart the line daemon",
1834
+ "line.opt_uninstall": "Uninstall",
1835
+ "line.opt_uninstall_desc": "Stop the daemon and delete ~/.scream-code/line",
1836
+ "line.wizard_title": "Configure Feishu channel",
1837
+ "line.wizard_hint": "Follow the guided setup to create a Feishu app (~3 min), or paste existing credentials",
1838
+ "line.opt_guided": "Guided app creation (recommended)",
1839
+ "line.opt_guided_desc": "Step-by-step: create app → grant scopes → long connection → release → paste credentials",
1840
+ "line.fs_wizard_title": "Feishu app setup wizard",
1841
+ "line.fs_step_title": "Step {n} of {total}",
1842
+ "line.fs_next": "Done — next step",
1843
+ "line.fs_later": "Quit any time; run /line to resume where you left off",
1844
+ "line.fs_goto_credentials": "Paste credentials now",
1845
+ "line.fs_step1": "① Create the app\n\n1. Open https://open.feishu.cn/app and sign in (personal accounts work)\n2. Console → \"Create custom app\"\n3. Any name (e.g. scream); description optional",
1846
+ "line.fs_step2": "② Enable the bot\n\nApp details → \"App capability\" in the sidebar → add & enable \"Bot\" (name/description optional)",
1847
+ "line.fs_step3": "③ Grant scopes\n\n\"Permissions\" in the sidebar → search and enable each:\n· contact:user.base:readonly (user info)\n· im:message.group_at_msg:readonly (group @bot)\n· im:message.p2p_msg:readonly (direct messages)\n· im:message:send_as_bot (send as the app)\nOptional: im:message.group_msg (read all group messages; without it groups only respond when @-mentioned)",
1848
+ "line.fs_step4": "④ Event subscription (long connection, no public IP)\n\n\"Events & callbacks\" in the sidebar →\n· Event config: subscription method = \"Use long connection to receive events\" → add event im.message.receive_v1 (receive messages)\n· Callback config: subscription method = \"Use long connection to receive events\" too",
1849
+ "line.fs_step5": "⑤ Release the app\n\n\"Version management & release\" in the sidebar → create a version → submit for release (admin approval for custom apps)",
1850
+ "line.fs_step6": "⑥ Get credentials\n\n\"Credentials & basic info\" in the sidebar → copy the App ID (starts with cli_) and App Secret.\n\nPaste them in the next step to finish.",
1851
+ "line.opt_manual": "Enter credentials manually",
1852
+ "line.opt_manual_desc": "Paste your Feishu app App ID and App Secret",
1853
+ "line.opt_tutorial": "View setup tutorial",
1854
+ "line.opt_tutorial_desc": "Steps to create a Feishu app from scratch",
1855
+ "line.tutorial_title": "Feishu app setup tutorial",
1856
+ "line.tutorial": "① Open open.feishu.cn → Console → \"Create custom app\" (personal accounts work)\n② App details → \"Add app capability\" → enable \"Bot\"\n③ \"Permissions\" → grant im:message related scopes (receive & send messages)\n④ \"Events & callbacks\" → choose \"Use long connection to receive events\" (no public IP needed)\n⑤ \"Version management\" → create and release a version\n⑥ \"Credentials\" → copy the App ID (cli_…) and App Secret\n\nThen run /line again and choose \"Enter credentials manually\".",
1857
+ "line.input_appid": "Enter App ID",
1858
+ "line.input_secret": "Enter App Secret",
1859
+ "line.validating": "Verifying Feishu credentials…",
1860
+ "line.config_saved": "Configuration saved",
1861
+ "line.ask_start": "Configured. Start the daemon now?",
1862
+ "line.opt_start_now": "Start now",
1863
+ "line.opt_start_now_desc": "Launch the daemon in the background; then just message the bot in Feishu",
1864
+ "line.not_configured": "No platform configured yet (Feishu/WeChat). Run the wizard first.",
1865
+ "line.starting": "Starting daemon…",
1866
+ "line.started": "line daemon started (pid {pid})",
1867
+ "line.already_running": "line daemon already running (pid {pid})",
1868
+ "line.start_failed": "Start failed: {error}",
1869
+ "line.stopping": "Stopping daemon…",
1870
+ "line.stopped": "line daemon stopped.",
1871
+ "line.not_running": "line daemon is not running.",
1872
+ "line.restarting": "Restarting daemon…",
1873
+ "line.config_broken": "line configuration file is broken",
1874
+ "line.confirm_uninstall": "Uninstall the line channel?",
1875
+ "line.uninstall_irreversible": "This cannot be undone; only line config and logs are removed",
1876
+ "line.confirm_uninstall_btn": "Uninstall",
1877
+ "line.will_clean": "Stop the daemon and delete ~/.scream-code/line (config & logs)",
1878
+ "line.uninstalling": "Uninstalling the line channel…",
1879
+ "line.uninstalled": "line channel uninstalled",
1880
+ "line.uninstall_note": "Re-run /line any time to set it up again.",
1881
+ "line.uninstall_failed": "Uninstall failed: {error}",
1882
+ "registry.line_desc": "Native Feishu & WeChat channels (wizard / daemon)",
1883
+ "line.opt_wizard_weixin": "Configure WeChat (wizard)",
1884
+ "line.opt_wizard_weixin_desc": "Official ilink bot gateway — just paste a token",
1885
+ "line.weixin_wizard_title": "Configure WeChat channel",
1886
+ "line.weixin_wizard_hint": "Choose how to configure",
1887
+ "line.weixin_opt_qr": "Scan to log in (recommended)",
1888
+ "line.weixin_opt_qr_desc": "The terminal shows a login link — open it in WeChat on your phone. No other tools needed",
1889
+ "line.weixin_qr_begin": "Requesting a WeChat login link…",
1890
+ "line.weixin_qr_title": "WeChat QR login",
1891
+ "line.weixin_qr_notice": "To log in with WeChat:\n\n1. Copy the link below\n2. Open it in WeChat on your phone (or recognize it with WeChat \"Scan\")\n3. Confirm the login on your phone\n\n{url}\n\nOnce confirmed, the wizard fetches the token and writes the config automatically (waits up to 8 minutes).",
1892
+ "line.weixin_qr_waiting": "Waiting for WeChat confirmation… (up to 8 minutes)",
1893
+ "line.weixin_qr_confirmed": "Login confirmed — token received",
1894
+ "line.weixin_qr_failed": "QR login failed: {error}",
1895
+ "line.weixin_qr_timeout": "Timed out: no confirmation within 8 minutes. Start the QR login again.",
1896
+ "line.weixin_allow_from_note": "Your WeChat id was added to the allow_from list (edit the config file to adjust):",
1897
+ "line.weixin_tutorial_title": "WeChat channel tutorial",
1898
+ "line.weixin_tutorial": "The WeChat channel uses WeChat's official ilink bot gateway (no public IP, no third-party tools).\n\nComplete flow (about 1 minute):\n① Run /line → \"Configure WeChat (wizard)\" → \"Scan to log in (recommended)\"\n② The terminal shows a login link → copy it and open it in WeChat on your phone (or recognize it with WeChat \"Scan\")\n③ Confirm on your phone → the token is saved automatically and your WeChat id is added to allow_from\n④ Back to /line → \"Start\" → the footer shows a green ◆\n⑤ Message the bot once on WeChat → session activation done, then just chat\n\nAllow list: with allow_from unset, ANY private-chat user could trigger your model billing. QR login auto-fills your own id; to invite colleagues, edit ~/.scream-code/line/config.json (comma-separated, like xxx@im.wechat).\n\nAlready have a token (from a carrier) → \"Enter token manually\".",
1899
+ "line.weixin_opt_manual": "Enter token manually",
1900
+ "line.weixin_opt_manual_desc": "Paste the ilink bot Bearer token",
1901
+ "line.weixin_opt_tutorial": "View WeChat tutorial",
1902
+ "line.weixin_opt_tutorial_desc": "Complete flow (QR login / allow list / activation)",
1903
+ "line.weixin_input_token": "Enter ilink bot token",
1904
+ "line.weixin_validating": "Verifying WeChat token…",
1905
+ "line.weixin_session_expired": "Token valid, session pending activation",
1906
+ "line.weixin_session_expired_hint": "After the daemon starts, message the bot once from an allowed WeChat account to activate the session.",
1907
+ "line.weixin_config_saved": "WeChat configuration saved",
1908
+ "line.platform_taken": "line is a single-channel design",
1909
+ "line.platform_taken_detail": "The {taken} channel is configured. Run /line → Uninstall first, then set up the other platform.",
1910
+ "line.channel_feishu": "Feishu",
1911
+ "line.channel_weixin": "WeChat",
1871
1912
  "auth.fetching_models": "Fetching latest model catalog...",
1872
1913
  "auth.catalog_fetch_failed": "Failed to fetch the remote model catalog: {error}. Check your network (the catalog host may be unreachable in your region) and retry, or use /config diy to set up a provider manually.",
1873
1914
  "auth.no_providers": "No model providers configured.",
@@ -1977,7 +2018,7 @@ const dictionaries = {
1977
2018
  "session.title": "Sessions",
1978
2019
  "session.loading": "Loading sessions...",
1979
2020
  "session_picker.empty": "No sessions found. Press Escape to close.",
1980
- "session_picker.cc_restricted": "CC sessions cannot be switched or deleted. Use the file path below to manage manually",
2021
+ "session_picker.cc_restricted": "Channel-managed sessions cannot be switched or deleted here — use the file path below to manage manually",
1981
2022
  "session_picker.batch_delete_confirm": "Delete {count} selected sessions?",
1982
2023
  "session_picker.batch_delete_hint": " Press Enter to confirm batch delete, Esc to cancel",
1983
2024
  "session_picker.batch_delete_unavailable": "Batch delete is not available here.",
@@ -2435,16 +2476,6 @@ const dictionaries = {
2435
2476
  "transcript.tool_name": "Tool {name}: ",
2436
2477
  "transcript.activated_skill": "Activated plugin: {name}",
2437
2478
  "transcript.more_history": "↑ {count} more history message(s)",
2438
- "transcript.child_request": "{name} is asking the parent agent ({type})",
2439
- "transcript.child_request_anon": "A subagent is asking the parent agent ({type})",
2440
- "transcript.child_request_type_info": "info",
2441
- "transcript.child_request_type_handoff": "handoff",
2442
- "transcript.child_request_type_escalate": "escalate",
2443
- "transcript.child_request_needs": "needs {value}",
2444
- "transcript.child_request_expecting": "expecting {value}",
2445
- "transcript.child_request_artifacts": "artifacts {value}",
2446
- "transcript.child_request_evidence": "evidence {value}",
2447
- "transcript.child_request_missing": "missing {value}",
2448
2479
  "compaction.done": "Compaction complete",
2449
2480
  "compaction.canceled": "Compaction cancelled",
2450
2481
  "compaction.in_progress": "Compacting context...",
@@ -2483,9 +2514,9 @@ const dictionaries = {
2483
2514
  "tc.rejected": "Rejected",
2484
2515
  "tc.cancelled": "Cancelled",
2485
2516
  "tc.error_prefix": "Error: ",
2486
- "dialog.cc_session_connected": "Connected to CC session ({id}).",
2517
+ "dialog.cc_session_connected": "Connected to channel session ({id}).",
2487
2518
  "dialog.create_session_failed": "Failed to create session",
2488
- "dialog.cc_managed": "CC session managed by cc-connect. Please operate from the chat channel.",
2519
+ "dialog.cc_managed": "This session is managed by an IM channel. Operate from the chat app, or stop that channel before deleting.",
2489
2520
  "dialog.memo_injected": "Injected memo #{id}",
2490
2521
  "dialog.approval_title": "Scream Code requires approval",
2491
2522
  "dialog.question_title": "Scream Code needs your answer",
@@ -2525,46 +2556,6 @@ const dictionaries = {
2525
2556
  "thinking.more_lines": "... ({count} more lines, ctrl+o to expand)",
2526
2557
  "tool.more_lines": "... ({count} more lines)",
2527
2558
  "shell.more_lines": "... ({count} more lines, ctrl+o to expand)",
2528
- "ccconnect.note_botfather": "Create a bot at @BotFather first",
2529
- "ccconnect.note_napcat": "Requires NapCat/OneBot",
2530
- "ccconnect.note_wecom": "Requires public IP",
2531
- "ccconnect.note_matrix": "E2EE encrypted, needs homeserver + access token",
2532
- "ccconnect.note_webex": "Create a bot at developer.webex.com",
2533
- "ccconnect.note_max": "Create a bot via @MasterBot",
2534
- "ccconnect.note_googlechat": "Requires GCP service account JSON",
2535
- "ccconnect.note_cloud_web": "Self-hosted IM gateway",
2536
- "ccconnect.note_yuanbao": "Tencent Yuanbao, needs app-key:app-secret",
2537
- "ccconnect.note_tuitui": "Needs app_id + app_secret",
2538
- "ccconnect.note_wps_agentspace": "Needs app_id + wps_sid",
2539
- "ccconnect.new_platform_version_hint": "⚠ This platform requires cc-connect v1.5.0 or newer. Please update cc-connect first.",
2540
- "ccconnect.config_comment_attachment": "# Global: allow/disallow image & file backhaul to chat (on = enabled, off = disabled)",
2541
- "ccconnect.reconfigured": "{name} already configured (config preserved)",
2542
- "ccconnect.config_path": "Config file: {path}",
2543
- "ccconnect.config_done": "✔ {name} channel configured",
2544
- "ccconnect.config_written": "Config file written: {path}",
2545
- "ccconnect.quick_ref": "📋 Common management commands (recommended to save):",
2546
- "ccconnect.pm2_status": " pm2 status Check status (online = OK)",
2547
- "ccconnect.pm2_restart": " pm2 restart cc-connect Restart service",
2548
- "ccconnect.pm2_stop": " pm2 stop cc-connect Stop service",
2549
- "ccconnect.pm2_logs": " pm2 logs cc-connect View logs",
2550
- "ccconnect.pm2_delete": " pm2 delete cc-connect Fully delete",
2551
- "ccconnect.reconfigure_warning": " ⚠ Do not run /cc-connect again with the same platform, or existing config will be overwritten!",
2552
- "ccconnect.reconfigure_change": " To switch platforms, delete C:\\Users\\<username>\\.cc-connect\\config.toml first",
2553
- "ccconnect.init_steps": "📋 Initialization steps (first-time setup only, follow in order):",
2554
- "ccconnect.step_platform_auth": " Step 1: Platform auth{note}",
2555
- "ccconnect.once_tag": "(one-time)",
2556
- "ccconnect.step_n": " Step {num}: {label}{once}",
2557
- "ccconnect.auto_done": " ✅ Auto-completed, no manual action needed ({command})",
2558
- "ccconnect.more_commands": "More commands ({method}):",
2559
- "ccconnect.attachment_hint": "💡 Enable attachment backhaul (let Agent send images & files):",
2560
- "ccconnect.bind_setup": " Send /bind setup in chat",
2561
- "ccconnect.autostart_hint": "💡 Auto-start on boot via cc-connect-startup.bat in Startup folder.",
2562
- "ccconnect.manual_restart": " To manually restart service: pm2 resurrect",
2563
- "ccconnect.not_installed": "cc-connect not installed",
2564
- "ccconnect.install_guide": "Run in terminal first:\n\n npm install -g cc-connect\n\nAfter installation, run /cc-connect again to configure.",
2565
- "ccconnect.already_configured": "{name} ✔ Configured",
2566
- "ccconnect.picker_title": "cc-connect Quick Channel Setup",
2567
- "ccconnect.picker_hint": "Select a platform to connect; config will be auto-written to ~/.cc-connect/config.toml",
2568
2559
  "market.humanizer_name": "Humanizer AI Text De-AI",
2569
2560
  "market.humanizer_desc": "Remove AI writing traces: 30 AI pattern detection × 5 categories × voice calibration, output pure human style",
2570
2561
  "market.contract_name": "Contract Review Pro",
@@ -2660,7 +2651,6 @@ const dictionaries = {
2660
2651
  "knowledge.ingest_summary": "Total: {chunks} chunks, {events} events, {entities} entities",
2661
2652
  "knowledge.empty_store": "Knowledge base is empty, please ingest documents with /knowledge first",
2662
2653
  "knowledge.web_opened": "Knowledge graph opened: {url}",
2663
- "cc.clean_config.detail": " ~/.cc-connect (includes session records, config, logs)",
2664
2654
  "registry.auto_desc": "Toggle auto permission mode",
2665
2655
  "registry.yolo_desc": "Toggle auto-approve mode (yolo)",
2666
2656
  "registry.bot_desc": "Toggle unattended bot mode (bot)",
@@ -2789,8 +2779,6 @@ const dictionaries = {
2789
2779
  "registry.mcp_desc": "Manage MCP servers (install/disable/uninstall)",
2790
2780
  "registry.plugin_desc": "Plugin center, manage plugins including activate, install, uninstall",
2791
2781
  "registry.extension_desc": "Code extensions, activate or deactivate a plugin entry point",
2792
- "registry.cc_desc": "Control your cc (start/stop/restart)",
2793
- "registry.cc_connect_desc": "cc-connect quick channel setup (requires installation)",
2794
2782
  "registry.revoke_desc": "Undo last conversation round (specify rounds, e.g. /revoke 3)",
2795
2783
  "registry.fork_desc": "Copy current session and start a new branch",
2796
2784
  "registry.title_desc": "Set or show session title",
@@ -2870,14 +2858,20 @@ const dictionaries = {
2870
2858
  };
2871
2859
  function detectSystemLocale() {
2872
2860
  const env = process.env;
2873
- const envLang = (env["LC_ALL"] || env["LC_MESSAGES"] || env["LANG"] || env["LANGUAGE"] || "").toLowerCase();
2861
+ const envLang = ([
2862
+ "LC_ALL",
2863
+ "LC_MESSAGES",
2864
+ "LANG",
2865
+ "LANGUAGE"
2866
+ ].map((name) => env[name]).find((v) => v !== void 0 && v !== "") ?? "").toLowerCase();
2874
2867
  if (envLang.startsWith("zh")) return "zh";
2875
2868
  if (envLang.length > 0) return "en";
2876
2869
  try {
2877
2870
  if (Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase().startsWith("zh")) return "zh";
2878
2871
  } catch {}
2879
2872
  if (process.platform === "win32") {
2880
- if ((env["LANG"] || "").toLowerCase().startsWith("zh")) return "zh";
2873
+ const winRaw = env["LANG"];
2874
+ if ((winRaw !== void 0 && winRaw !== "" ? winRaw : "").toLowerCase().startsWith("zh")) return "zh";
2881
2875
  }
2882
2876
  return "en";
2883
2877
  }