/** * The Chinese message catalog: mirrors {@link en} key-for-key; the shared * key union comes from the English catalog, so a missing key here fails * typecheck. * * @module @deepseek-ai/dsh-tui/locales/zh */ import type { MessageCatalog } from './en.ts' export const zh: MessageCatalog = { // Shared panel chrome 'panel.close': 'esc/q 关闭', 'panel.moveEnterSelect': '↑↓ 移动 · 回车 选择 · esc 关闭', 'panel.moveEnterSelectBack': '↑↓ 移动 · 回车 选择 · esc 返回 · q 关闭', 'panel.scrollEnds': '↑↓ 滚动 · pgup/pgdn 翻页 · g/G 首尾 · esc/q 关闭', 'panel.loading': '加载中…', 'panel.loadFailed': '加载失败', 'panel.noMatch': '没有匹配项', 'panel.emptyClose': 'esc 关闭', 'panel.searchIdle': '搜索:输入即过滤', 'panel.searchIdleStop': '搜索:输入即过滤 · esc 停止', 'panel.searchPrefix': '搜索:', // /language panel 'language.title': '/language — 界面语言', 'language.hint': '↑↓ 移动 · 回车 应用 · esc/q 关闭', // /theme panel 'theme.title': '/theme — 配色主题', 'theme.compact': '/theme · esc 关闭', 'theme.current': '当前', 'theme.dark.label': '暗色', 'theme.dark.description': 'DeepSeek 暗色配色(默认)', 'theme.light.label': '亮色', 'theme.light.description': '适合浅色终端的配色', 'theme.prismatic.label': '棱彩', 'theme.prismatic.description': '霓虹合成波配色(紫/品红/青)', 'theme.rainbow.label': '彩虹', 'theme.rainbow.description': '随机多彩配色(/rainbow 重掷)', 'theme.auto.label': '自动', 'theme.auto.description': '跟随终端;检测功能启用前使用暗色', // /history panel 'history.title.prompts': '/history · {count} 条提示 · 输入即过滤', 'history.title.match': '/history · {count} 条中 {matches} 条匹配「{query}」', 'history.filterHint': '过滤{state},回车填入输入框', 'history.filterEmpty': '· 输入以搜索提示', 'history.filterQuery': '· {query}', 'history.empty': '没有匹配的提示', 'history.compact.none': '没有匹配的提示', 'history.footer': '↑↓ 移动 · g/G 首尾 · 回车 填入 · esc 关闭', // /search panel 'search.title.type': '/search · 输入关键词后回车', 'search.title.hits': '/search · 「{query}」命中 {count} 条', 'search.title.hitsPlural': '/search · 「{query}」命中 {count} 条', 'search.hint': '{state} · 回车 搜索或恢复会话', 'search.hintEmpty': '输入以搜索历史会话', 'search.empty.idle': '对全部持久会话做全文检索', 'search.empty.noHits': '没有匹配的会话{loading}', 'search.compact.noResults': '暂无结果', 'search.compact.searching': '搜索中…', 'search.compact.error': '错误:{message}', 'search.footer': '↑↓ 移动 · 回车 搜索/恢复 · esc 关闭', // /statusline panel 'header.hint': '/help · Esc 中断 · Ctrl+C 退出', 'header.hintResumed': '已恢复 · /help · Esc 中断', 'statusline.title': '/statusline · 选项实时应用到下方状态栏', 'statusline.item.model': '模型', 'statusline.item.model.desc': '本会话使用的 provider/model', 'statusline.item.cwd': '目录', 'statusline.item.cwd.desc': '工作目录基名', 'statusline.item.mode': '模式', 'statusline.item.mode.desc': '当前 agent 预设', 'statusline.item.branch': '分支', 'statusline.item.branch.desc': '仓库内 git 分支', 'statusline.item.context': '上下文', 'statusline.item.context.desc': '上下文窗口占用', 'statusline.item.permission': '权限', 'statusline.item.permission.desc': '权限预设徽章与循环提示', 'statusline.item.plan': '计划', 'statusline.item.plan.desc': '计划模式标记', 'statusline.item.turns': '回合', 'statusline.item.turns.desc': '回合与步骤计数', 'statusline.item.durations': '耗时', 'statusline.item.durations.desc': '模型/首字/解码/工具墙钟', 'statusline.item.cache': '缓存', 'statusline.item.cache.desc': '计费输入的缓存命中占比', 'statusline.item.tokens': '用量', 'statusline.item.tokens.desc': '累计输入/输出 token', 'statusline.item.title': '标题', 'statusline.item.title.desc': '会话标题或短 id', 'statusline.item.goal': '目标', 'statusline.item.goal.desc': '进行中的目标阶段与轮次', 'statusline.item.sandbox': '沙箱', 'statusline.item.sandbox.desc': '与预设不同的沙箱覆盖', // /schedule panel 'schedule.title': '/schedule · {count} 条活动提醒', 'schedule.titlePlural': '/schedule · {count} 条活动提醒', 'schedule.empty': '暂无活动提醒——模型通过 schedule_create 创建', // Transcript document panel (/resume details) 'document.loading': '转录加载中…', 'attach.bar': '观察模式 · {label} · r 重新载入 · esc/ctrl+d 返回', 'attach.loading': '正在载入 {label} 的子会话…', 'attach.status': '子代理 {label} · {id} · {turns} 回合', 'notice.attachUnavailable': '当前配置无法附加子代理会话', 'document.compact': '转录 · esc 关闭', 'document.expanded': '全屏', 'document.refreshHint': 'r 刷新', 'document.footerExpanded': '行 {from}-{to}/{total} · ↑↓/pg/g/G{refresh} · esc/ctrl+d 返回', 'document.footer': '行 {from}-{to}/{total} · ↑↓/pg/g/G · enter/f 全屏 · t/esc 关闭', // /review picker 'review.picker.title': '/review · 选择审查目标', 'review.picker.uncommitted': '审查未提交的改动(staged / unstaged / 新文件)', 'review.picker.branch': '选择基线分支对比(列出本地分支)', 'review.picker.commit': '审查当前分支的某个提交(列出近期提交)', 'review.picker.custom': '自定义审查关注点(输入文字)', 'review.picker.customHint': '输入关注点后回车开始审查', 'review.picker.branches': '{filtered}/{total} 个分支', 'review.picker.commits': '{filtered}/{total} 个提交', 'review.picker.loadingBranches': '分支加载中…', 'review.picker.loadingCommits': '提交加载中…', 'review.picker.empty': '没有候选', 'review.picker.noMatch': '没有匹配项', 'review.picker.loading': '加载中…', 'review.picker.loadFailed': '加载失败', 'review.picker.compact': '选择审查目标', 'review.picker.footer': '↑↓ 移动 · 回车 选择 · esc 返回 · q 关闭', // Review result summary 'review.summary.untagged': '未分级×{n}', 'review.summary.incorrect': 'patch 不正确', 'review.summary.correctClean': '未发现问题', 'review.summary.correct': 'patch 正确', 'review.summary.noConclusion': '审查完成:没有结构化结论', 'review.summary.zero': '审查完成:0 项发现 · {verdict}', 'review.summary.count': '审查完成:{count} 项发现({parts})', 'review.summary.countVerdict': '审查完成:{count} 项发现({parts}) · {verdict}', // Review runner notices 'review.notice.started': '审查已在只读权限下开始', 'review.notice.failed': '审查失败:{message}', 'review.notice.unavailable': '审查不可用:{message}', // LOCAL_COMMAND descriptions 'cmd.help': '显示本帮助', 'cmd.model': '切换模型并管理供应商', 'cmd.effort': '调整当前模型的推理档位', 'cmd.mode': '查看或选择 Agent 预设(/mode [preset])', 'cmd.permission': '查看或选择权限预设(/permission [preset])', 'cmd.new': '新建并切换到新会话(/new [preset])', 'cmd.fork': '从最近的完成回合分叉(/fork [event-seq])', 'cmd.resume': '浏览或恢复历史会话(/resume [id|前缀])', 'cmd.search': '跨历史会话全文检索(/search [关键词])', 'cmd.plugin': '查看插件组成状态', 'cmd.update': '一键对齐升级 dsh-code、宿主与 profile 插件', 'cmd.jobs': '查看后台任务', 'cmd.schedule': '查看活动提醒(经 schedule 工具创建)', 'cmd.statusline': '自定义状态栏显示项', 'cmd.theme': '切换配色主题', 'cmd.language': '切换界面语言(/language [en|zh])', 'cmd.rainbow': '重掷或指定彩虹配色(/rainbow [seed])', 'cmd.animation': '开关装饰动画,shimmer 与活动指示始终保留(/animation [on|off])', 'cmd.history': '搜索并复用历史提示词', 'cmd.queue': '管理等待下一轮的消息', 'cmd.usage': '查看本会话的 token 用量', 'cmd.agents': '查看本会话的子代理', 'cmd.todos': '查看完整待办列表', 'cmd.subagent': '选择子代理使用的模型', 'cmd.vscode-keys': '放行 ctrl+r 进 VS Code 系终端', 'cmd.delete': '删除会话及其子代理线程', 'cmd.clear': '清屏', 'cmd.export': '导出转录为 Markdown(/export [path])', 'cmd.title': '重命名当前会话(/title )', 'cmd.copy': '复制最近一条完整回复', 'cmd.diff': '查看 Git 改动(/diff [--staged|ref])', 'cmd.review': '在当前会话内审查 Git 改动(/review [说明])', 'cmd.quit': '退出', // Help overlay 'help.keysTitle': ' 快捷键', 'help.key.submit': '回车 提交 · ctrl+j / alt+enter 换行 · ↑↓ 历史 · tab 补全', 'help.key.mentions': '@ 引用工作区文件或历史会话', 'help.key.inspector': 'ctrl+o 历史详情 · ctrl/alt+r 思考 · shift+tab 权限预设', 'help.key.cancel': 'esc 中断运行中的回合 · ctrl+c 取消/清空/退出 · ctrl+d 退出', 'help.key.queue': '空输入框 tab 选择排队或插队 · /queue 管理已排队消息 · Delete 取消最新一条', 'help.key.edit': 'ctrl+k 剪切到行尾 · ctrl+u 清空行 · ctrl+a / ctrl+e 行首尾', 'help.commandsTitle': ' 命令', 'help.skillsTitle': ' 技能', 'help.footer': '↑↓ 滚动 · pgup/pgdn 翻页 · g/G 首尾 · esc/q 关闭', 'help.compact': '/help · esc/q 关闭', 'panel.queue.title': '/queue — {count} 条排队消息 · 行 {from}-{to}', 'panel.queue.empty': ' 下一轮没有排队消息', 'panel.queue.attachments': '[含附件:只读]', 'panel.queue.footerBusy': '↑↓ 选择 · enter 插队 · e 编辑文本 · d 删除 · esc/q 关闭', 'panel.queue.footerIdle': '↑↓ 选择 · e 编辑文本 · d 删除 · esc/q 关闭', 'panel.queue.editFooter': '输入 · ←→ 移动 · enter 保存 · esc 取消', 'panel.queue.compact': '/queue · esc/q 关闭', 'panel.usage.title': '/usage — 本会话用量', 'panel.usage.compact': '/usage · esc/q 关闭', 'panel.usage.footer': '↑↓ 滚动 · pgup/pgdn 翻页 · g/G 首尾 · esc/q 关闭', 'panel.usage.totals': '总量(整个会话)', 'panel.usage.uncached': '未命中输入', 'panel.usage.cacheWrite': '缓存写入', 'panel.usage.cacheRead': '缓存读取', 'panel.usage.output': '输出', 'panel.usage.total': '合计', 'panel.usage.cacheHit': '缓存命中', 'panel.usage.turns': '按回合', 'panel.usage.byModel': '按模型', 'panel.usage.colTurns': '回合数', 'panel.usage.unknownModel': '未标注模型', 'panel.usage.colTurn': '回合', 'panel.usage.colTotal': '合计', 'panel.usage.colUncached': '未命中', 'panel.usage.colCacheRead': '缓存读', 'panel.usage.colCacheHit': '命中率', 'panel.usage.colCacheWrite': '缓存写', 'panel.usage.colOut': '输出', 'panel.usage.colThink': '思考', 'panel.usage.colModel': '模型', 'panel.usage.partialNote': '+ 表示这一组里有回合没有上报该项,数字只统计了已上报的部分', 'panel.usage.unavailable': '本部署没有挂载用量统计(缺少 dsh-token-meter)', 'panel.usage.noTurns': '还没有已完成的回合', 'status.cycleHint': '(shift+tab 切换)', 'approval.compact': '审批{queued} · 回车/y 允许 · esc/n 拒绝', 'approval.overflow': '… 还有 {count} 行 · ctrl+o 查看完整调用', 'question.compact.plan': '计划审查 · esc 取消', 'question.compact.normal': '问题 · esc 取消', 'approval.submitted': '已提交…', 'approval.footer': '↑↓ 移动 · 回车确认 · y/n/d 快速选择 · esc 拒绝', 'question.footer': '↑↓ 移动 · 1-9 选择 · 空格开关 · 回车提交 · esc 取消', 'question.custom': '输入自定义答案', 'question.submitted': '已提交…', 'question.customNoOptions': '↑↓/pgup/pgdn 滚动 · 输入答案 · 回车提交 · esc 中断', 'question.customOptions': '↑↓/pgup/pgdn 滚动 · 输入答案 · 回车提交 · tab/esc 或清空退格:返回选项', 'question.multiOptions': '↑↓ 移动 · pgup/pgdn 滚动 · 空格/1-9 开关 · 回车提交 · c 自定义 · esc 中断', 'question.singleOptions': '↑↓ 移动 · pgup/pgdn 滚动 · 1-9 选择 · c 自定义 · esc 中断', 'question.switch': ' · ←→/ctrl+p/n 切换问题', 'question.title.plan': '📋 计划审查', 'question.title.normal': '❓ 问题', // Composer and status chrome 'composer.placeholder': '输入消息 · / 命令 · @ 引用 · tab 插队', 'composer.placeholderSteer': '插队进本轮 · tab 改为排队等下一轮', 'notice.submitMode.queue': '发送 → 排队等下一轮', 'notice.submitMode.steer': '发送 → 插队进本轮(仅回合运行中;空闲时直接发出)', // 结算后的消息标记:不是空闲时直接发送的那种 'entry.delivery.queued': '排队', 'entry.delivery.steered': '插队', 'status.shiftTabHint': '(shift+tab 切换)', 'status.label.turns': '回合', 'status.label.steps': '步骤', 'status.label.modelTime': '模型', 'status.label.latency': '延迟', 'status.label.tokensPerSec': ' tokens/秒', 'status.label.tool': '工具', 'status.label.cache': '缓存', 'status.label.in': '入', 'status.label.out': '出', 'status.label.mode': '/mode', 'status.label.context': '上下文', 'status.label.sandbox': '沙箱', 'status.plan.on': '计划开', 'status.plan.mark': '⧉ 计划', 'status.goal.round': '◎ 第 {current}/{max} 轮', 'status.goal.phase': '◎ {phase}', // Frozen band 'frozen.keysGoTo': '按键交给{owner} · esc {action}', 'frozen.action.rejects': '拒绝', 'frozen.action.cancels': '取消', 'frozen.action.closes': '关闭', 'frozen.action.waits': '等待', // Relative time (panel list timestamps) 'time.justNow': '刚刚', 'time.minutesAgo': '{n} 分钟前', 'time.hoursAgo': '{n} 小时前', 'time.daysAgo': '{n} 天前', // Common notices 'notice.themeSaved': '主题 → {name}', 'notice.themeRainbow': '主题 → rainbow · 种子 {seed} · /rainbow 再随机', 'notice.rainbowRolled': '彩虹 · 种子 {seed} · /rainbow 再随机 · /rainbow {seed} 锁定', 'notice.languageSaved': '语言 → {name}', 'notice.themeSaveFailed': '主题保存失败:{message}', 'notice.languageSaveFailed': '语言保存失败:{message}', 'notice.alreadyActive': '该会话已是当前会话', 'notice.permissionPresetsUnmounted': '当前组合未挂载权限预设', 'notice.queueCancelled': '已取消排队消息', 'notice.queueActionFailed': '队列操作失败:{message}', 'notice.queueUnavailable': '该消息已不在队列中', 'notice.queueSteerUnavailable': '仅运行中的回合可以插队', 'notice.queueEditEmpty': '排队消息不能为空', 'notice.queueEdited': '已编辑排队消息', 'notice.queueSteered': '已将排队消息插入本轮', 'notice.historySaveFailed': '历史保存失败:{message}', 'notice.turnCancelled': '回合已取消 —— Ctrl+C 或 /quit 退出', 'notice.turnCancelledKeepQueue': '回合已取消 —— 所有待处理消息已保留 · Ctrl+C 或 /quit 退出', 'notice.noSessionYet': '还没有会话——先发一条消息开始', 'notice.usage.animation': '用法:/animation [on|off]', 'notice.usage.language': '用法:/language [en|zh]', 'notice.usage.rainbow': '用法:/rainbow [seed]', 'notice.usage.bareCommand': '用法:/{name}', 'notice.switchInProgress': '正在切换会话 —— 等新会话就绪后再发送,或用 /resume cancel 取消', 'notice.imageCancelled': '图片提交已取消', 'notice.themeConfigUnreadable': '主题配置无法读取,使用暗色:{message}', 'notice.languageConfigUnreadable': '语言配置无法读取,使用英文:{message}', 'notice.animationsConfigUnreadable': '装饰动画配置无法读取,保持开启:{message}', 'notice.statuslineConfigUnreadable': '状态栏配置无法读取,使用默认:{message}', 'notice.sessionSearchUnavailable': '此部署未启用会话检索', 'notice.subagentsReadOnly': '子代理会话为只读', 'notice.statuslineSaveFailed': '状态栏保存失败:{message}', 'notice.animationsSaveFailed': '装饰动画保存失败:{message}', 'notice.commandRegistryMissing': '当前组合未加载命令注册表', 'notice.commandFallbackFailed': '命令回退失败:{message}', 'notice.commandFailed': '命令执行失败:{message}', 'notice.invalidReference': '会话引用无效:{message}', 'notice.messageFailed': '{kind}失败:{message}', 'notice.referenceFailed': '会话引用失败:{message}', 'notice.activationFailed': '会话激活失败:{message}', 'notice.creationFailed': '会话创建失败:{message}', 'notice.modeChanged': '模式 → {value}', 'notice.modeSwitchFailed': '模式切换失败:{message}', 'notice.permissionChanged': '权限 → {value}', 'notice.permissionChangeFailed': '权限切换失败:{message}', 'notice.cancelFailed': '取消失败:{message}', 'notice.modeChangeFailed': '模式变更失败:{message}', 'notice.modelNotDefault': '模型切换已应用于当前会话,但未保存为默认值:{message}', 'notice.modelSelectionRejected': '模型选择被拒绝:{message}——请重新打开 /model 选择', 'notice.exported': '已导出到 {path}', 'notice.exportFailed': '导出失败:{message}', 'notice.resumeFailed': '恢复失败:{message}', 'notice.forkFailed': '分叉失败:{message}', 'notice.sessionSwitchFailed': '会话切换失败:{message}', 'notice.sessionCreated': '已创建 {id} · 模式 {mode}', 'notice.sessionResumed': '已恢复 {id} · 模式 {mode}', 'notice.sessionSwitchedDirty': '已切换到 {id},但 {detail}', 'notice.flushFailed': '上一会话刷新失败:{message}', 'notice.agentReleaseFailed': '上一代理释放失败:{message}', 'notice.copyEmpty': '还没有可复制的回复', 'notice.copied': '已复制最近一条回复', 'notice.switchQueued': '当前回合结束后将切换到 {label} · 可用 /resume cancel 取消', 'notice.reviewStarted': '审查已在只读权限下开始', 'notice.reviewFailed': '审查失败:{message}', 'notice.reviewUnavailable': '审查不可用:{message}', 'notice.startupImages': '正在处理 {count} 张启动图片…', 'notice.startupImagesAttached': '已附加 {count} 张启动图片', 'notice.initialPromptFailed': '初始提示失败:{message}', 'notice.rejected': '已拒绝——请在下方说明需要怎样调整(会影响下一步)', 'notice.attachmentAlready': '已附加 {name}', 'notice.attachmentsChecking': '正在检查 {count} 个附件…', 'notice.attachmentsAlready': '这些附件已经附加', 'notice.attachmentDraftChanged': '附件放置位置附近的草稿已变化,请重新放置文件', 'notice.attachmentsReady': '{count} 个附件已准备好,将随下一条消息发送', 'notice.attachmentFailed': '附件失败:{message}', 'notice.imageChecking': '正在检查图片 {name}…', 'notice.imageDraftChanged': '图片引用附近的草稿已变化,请重新选择', 'notice.imageReady': '{name} 已准备好,将随下一条消息发送', 'notice.imageFailed': '图片附件失败:{message}', 'notice.cancelBeforeExit': '退出前请先取消正在运行的回合(Esc 或 Ctrl+C)', 'notice.commandAttachments': '命令不能携带附件;该行将作为提示发送给模型', 'notice.copyFailed': '复制失败:{message}', 'notice.vscodeKeysFailed': 'vscode-keys 失败:{message}', 'notice.animationState': '装饰动画{state};活动指示保持开启', 'notice.deleteFailed': '删除失败:{message}', 'notice.modelChangedPlaceholder': '模型 → {model} · 历史图片将以文本占位符发送', 'notice.modelNextStep': '模型 → 下一步使用 {model}', 'notice.modelSwitchFailed': '模型切换失败:{message}', 'notice.loggedIn': '已登录 {provider};请选择模型', 'notice.loggedOut': '已退出 {provider}', 'notice.providerSaved': '供应商配置已保存:{provider}{suffix}', 'notice.apiKeyRemoved': '已移除 {provider} 的 API 密钥', 'notice.providerRemoved': '已移除供应商:{provider}', 'notice.providerUnavailable': '当前 profile 不支持供应商配置', 'notice.apiKeyUnavailable': '当前 profile 不支持移除 API 密钥', 'notice.providerRemovalUnavailable': '当前 profile 不支持移除供应商', 'notice.loginIdleOnly': '只有 Agent 空闲时才能登录供应商', 'notice.loginUnavailable': '当前 profile 不支持供应商登录', 'notice.logoutUnavailable': '当前 profile 不支持供应商登出', 'notice.modeChangedSimple': '模式 → {value}', 'notice.permissionChangedSimple': '权限 → {value}', 'notice.subagentsChanged': '子代理 → {value}', 'notice.subagentsInherited': '子代理 → 跟随当前模型', 'notice.subagentChangeFailed': '子代理模型切换失败:{message}', 'notice.modelMissing': '当前模型不在目录中', 'notice.effortUnavailable': '推理档位暂不可用(能力查询失败)——请重试', 'notice.modelLookupFailed': '模型查询失败:{message}', 'notice.diffFailed': 'diff 失败:{message}', // Additional panel chrome 'panel.footer.chooseSwitch': '↑↓ 移动 · 回车 切换 · r 刷新 · esc 关闭', 'panel.footer.chooseSelect': '↑↓ 移动 · 回车 选择 · r 刷新 · esc 关闭', 'panel.footer.inspectDetails': '↑↓ 查看 · 回车 详情 · r 刷新 · esc 关闭', 'panel.footer.inspectRefresh': '↑↓ 查看 · r 刷新 · esc 关闭', 'panel.footer.resume': 'tab/←→ 筛选 · ↑↓/pg 翻页 · ctrl+f 搜索 · e 详情 · t 转录 · 回车恢复', 'panel.footer.delete': 'tab/←→ 筛选 · ↑↓/pg 翻页 · ctrl+f 搜索 · e 详情 · t 转录 · 回车删除 · esc 关闭', 'panel.footer.transcript': '行 {from}-{to}/{total} · ↑↓/pg/g/G · t/esc 关闭', 'panel.footer.history': '↑↓ 移动 · g/G 首尾 · 回车填入 · esc 关闭', 'panel.footer.review': '↑↓ 移动 · 回车选择 · esc 返回 · q 关闭', 'panel.footer.statusline': '↑↓ 移动 · 空格开关 · ←→ 调整顺序 · d 恢复默认 · esc 关闭', 'panel.footer.schedule': 'esc/q 关闭{more} · 模型通过 schedule_create 创建提醒', 'panel.mode.title': '/mode · 当前 {current}', 'panel.permission.title': '/permission · 当前 {current}', 'panel.plugin.title': '/plugin · 插件加载状态', 'panel.jobs.title': '/jobs · 后台任务 · {count}', 'panel.resume.deleteTitle': '永久删除 {target}?此操作无法撤销,子代理线程也会删除', 'panel.resume.title': '/resume{mode}{search} · {toolbar}', 'panel.delete.title': '/delete{search} · {toolbar}', 'panel.noActiveReminders': '暂无活动提醒——模型通过 schedule_create 创建', 'panel.notMounted': '未加载', 'panel.broken': '异常:{message}', 'panel.live': '运行中', 'panel.parent': '父会话 {id}', 'panel.deleteMode': '删除模式', 'panel.searching': '搜索中', 'panel.noPresets': '暂无预设', 'panel.noPermissions': '暂无权限预设', 'panel.noJobs': '暂无后台任务', 'panel.diff.compact': '{title} · {files} 个文件 · esc/q 关闭', 'panel.diff.noFiles': '没有文件', 'panel.diff.footer': '↑/↓ 滚动 · g/G 首尾 · esc/q 关闭', 'panel.todos.compact': '待办 · esc/q 关闭', 'panel.todos.title': '待办 · 已完成 {done}/{total} · 进行中 {active} · 待处理 {pending} · 行 {from}-{to}/{rows}', 'panel.todos.empty': '暂无待办', 'panel.todos.footer': '↑↓ 滚动 · pgup/pgdn 翻页 · g/G 首尾 · esc/q 关闭', 'panel.verbose.compact': '历史详情 · ctrl+o / esc / q 关闭', 'panel.verbose.footer': '←→ 条目 · ↑↓ 滚动 · pgup/pgdn 翻页 · g/G 首尾 · ctrl+o/esc/q 关闭', 'panel.model.compact': '/model · {state}{providers} · {tail}', 'panel.model.noMatch': '没有匹配「{query}」的模型', 'panel.model.compactNoMatch': '没有匹配「{query}」', 'panel.model.loading': '加载中…', 'panel.model.error': '错误', 'panel.model.noModels': '暂无可用模型', 'panel.model.selectTitle': '/model — 选择模型', 'panel.model.matches': '{filtered}/{total} 个匹配「{query}」', 'panel.model.footer.filter': '输入过滤 · r 重试 · esc/q 关闭', 'panel.model.footer.filtered': '退格编辑 · esc 关闭', 'panel.model.title': '/model — 选择模型', 'panel.model.titleCount': '/model — 选择模型 · {index}/{total}', 'panel.model.titleMatches': '/model — 选择模型 · {filtered}/{total} 个匹配「{query}」', 'panel.model.footer.select': '输入过滤 · ↑↓ 移动 · pgup/pgdn 翻页 · 回车选择{providers} · r 重试 · esc/q 关闭', 'panel.model.footer.filteredSelect': '↑↓ 移动 · pgup/pgdn 翻页 · 回车选择 · 退格编辑 · esc 关闭', 'panel.model.providers': 'tab 供应商', 'panel.provider.failure': '不可用的供应商:{providers}', 'panel.provider.loading': '供应商加载中…', 'panel.provider.empty': '暂无可配置的供应商', 'panel.provider.notConfigured': '未配置', 'panel.provider.configured': '已配置', 'panel.provider.keyMissing': '缺少密钥', 'panel.provider.keyStatusUnavailable': '无法获取密钥状态', 'panel.provider.auth': '供应商认证', 'panel.provider.active': '活动', 'panel.provider.dormant': '未启用', 'panel.provider.readOnly': '只读', 'panel.provider.custom': '自定义', 'panel.provider.notConfiguredDivider': '── 未配置 ──', 'panel.provider.title': '/model — 供应商', 'panel.provider.titleCount': '/model — 供应商 · {index}/{total}', 'panel.provider.key': '密钥 {value}', 'panel.provider.authConfigured': '供应商认证', 'panel.provider.noKey': '缺少密钥', 'panel.provider.noLogin': '未配置', 'panel.provider.loginStatusUnavailable': '登录状态不可用:{message}', 'panel.provider.noConfiguredKey': '该供应商没有已配置的 API 密钥可移除', 'panel.provider.readOnlyKey': '该 API 密钥由环境以只读方式提供', 'panel.provider.notRemovable': '该供应商配置不可移除', 'panel.provider.noLoginFlow': '该供应商不支持交互式登录', 'panel.provider.loginRunning': '该供应商已有登录尝试正在进行', 'panel.provider.noLoginRecord': '该供应商没有可移除的登录记录', 'panel.provider.readOnlyLogin': '该登录记录为只读', 'panel.provider.notManaged': '该供应商不受 Harness settings 管理', 'panel.providers.compact': '/model providers · 回车配置 · d 删除密钥 · esc 返回', 'panel.providers.footer': '↑↓ 移动 · 回车配置 · d 删除密钥 · x 删除供应商 · r 重试 · esc 返回', 'panel.update.compact': '/update · {summary}', 'panel.update.checking': '检查中…', 'panel.update.probeFailed': '检查失败', 'panel.update.updating': '更新中…', 'panel.update.installed': '已安装——重启后生效', 'panel.update.failed': '失败', 'panel.update.upToDate': '已是最新', 'panel.update.aheadOfNpm': '新于 npm', 'panel.update.enter': '回车更新', 'panel.update.blocked': '已阻止', 'panel.update.title': '/update · 对齐升级', 'panel.auth.methodsFooter': '↑↓ 选择 · 回车继续 · esc/q 返回', 'panel.auth.answerFooter': '回车回答 · c 复制 URL/代码 · esc 取消登录', 'panel.auth.title': '/model · 登录 {provider}', 'panel.auth.waiting': '等待供应商响应…', 'panel.auth.compact': '供应商登录 · esc 取消', 'panel.auth.logoutCompact': 'y 登出 · n/esc 返回', 'panel.auth.logoutTitle': '/model · 退出供应商登录', 'panel.auth.removeRecord': '移除 {provider} 的登录记录', 'panel.auth.unchanged': '供应商 endpoint 和模型配置保持不变', 'panel.auth.working': '处理中…', 'panel.auth.logoutFooter': 'y 确认 · n/esc 返回', 'panel.setup.compact': '供应商配置 · 终端过窄 · esc 返回', 'panel.setup.noDonors': '暂无声明推理档位的模型;请用 e 声明,或手动填写设置', 'panel.setup.copyInto': '原样复制到 {id}', 'panel.setup.copyTitle': '/model — 复制推理档位', 'panel.setup.copyFooter': '↑↓ 移动 · 回车复制 · esc 返回', 'panel.setup.mode.subscribe': '订阅', 'panel.setup.mode.key': 'Key', 'panel.setup.mode.login.plan': '已登录 · 套餐', 'panel.setup.mode.login.none': '未登录', 'panel.setup.mode.login.running': '登录中…', 'panel.setup.mode.overridden': '⚠ 设置中的 Key 覆盖订阅登录', 'panel.setup.title': '/model — 配置 {provider}', 'panel.setup.footer': '↑↓ 移动 · ←→ 输入/输出 · 空格移除 · e 推理档位 · c 复制推理档位 · tab 按当前方式(订阅=网页登录 / Key=发现) · 回车保存 · esc 返回', 'panel.discovery.compact': '模型发现 · 终端过窄 · esc 返回', 'panel.discovery.loading': '正在发现模型…', 'panel.discovery.empty': '端点未提供模型;请在配置页手动添加 ID', 'panel.discovery.summary': '共 {advertised} 个 · 新增 {newCount} 个 · 已选 {checked} 个', 'panel.discovery.title': '/model — 发现 {provider}', 'panel.discovery.footer': '↑↓ 移动 · 空格勾选 · 回车采用 · f 重新获取 · esc 返回', 'panel.update.footer.probe': '检查中… · esc 关闭', 'panel.update.footer.error': 'r 重新检查 · esc 关闭', 'panel.update.footer.apply': '更新中… · ↑↓ 滚动 · esc 等待', 'panel.update.footer.current': '已是最新 · r 重新检查 · esc 关闭', 'panel.update.footer.ahead': '新于 npm,不降级 · r 重新检查 · esc 关闭', 'panel.update.footer.update': '回车更新 · r 重新检查 · esc 关闭', 'panel.update.footer.blocked': '已阻止 · r 重新检查 · esc 关闭', 'panel.footer.effortEmpty': 'esc 返回', 'panel.footer.effort': '↑↓ 移动 · 回车 应用 · esc/q 返回', 'panel.effort.title': '/model — {provider} · {model} 的推理档位', 'panel.effort.empty': '此模型未声明推理档位——使用供应商默认设置', 'panel.default': '默认', 'panel.footer.agents': '↑↓ 移动 · 回车/t 查看转录 · r 刷新 · esc 关闭', 'panel.agents.title': '/agents · {live} 个运行中 · 共 {total} 个', 'panel.document.title': '转录 · {id}', 'panel.subagent.transcriptTitle': '子代理 · {id}', 'panel.footer.subagent': '↑↓ 移动 · 回车 应用 · r 刷新 · esc 关闭', 'panel.subagent.title': '/subagent — 子代理使用的模型', 'panel.subagent.override': ' · 当前覆盖:{value}', 'panel.subagent.inherit': '跟随当前模型(/model 切换会同步)', 'panel.statusline.compact': '/statusline · esc 关闭', 'panel.schedule.compact': '/schedule · {summary}', 'panel.schedule.none': '暂无活动提醒', 'panel.schedule.more': ' · 另有 {count} 条', 'panel.schedule.footer': 'esc/q 关闭{more} · 模型通过 schedule_create 创建提醒', }