@aiwayds/dsh-tui-pi 2.18.2 → 2.20.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.
- package/README.md +12 -43
- package/README.zh-CN.md +11 -42
- package/lib/agents.js +67 -52
- package/lib/agents.js.map +1 -1
- package/lib/ask-user.d.ts +122 -3
- package/lib/ask-user.js +335 -41
- package/lib/ask-user.js.map +1 -1
- package/lib/attachments.js +8 -3
- package/lib/attachments.js.map +1 -1
- package/lib/btw.d.ts +4 -2
- package/lib/btw.js +22 -16
- package/lib/btw.js.map +1 -1
- package/lib/custom-provider.js +34 -28
- package/lib/custom-provider.js.map +1 -1
- package/lib/footer.d.ts +9 -8
- package/lib/footer.js +36 -18
- package/lib/footer.js.map +1 -1
- package/lib/hard-exit.d.ts +36 -0
- package/lib/hard-exit.js +64 -0
- package/lib/hard-exit.js.map +1 -0
- package/lib/history-fork.d.ts +2 -2
- package/lib/history-fork.js +12 -9
- package/lib/history-fork.js.map +1 -1
- package/lib/history-turns.d.ts +4 -2
- package/lib/history-turns.js +7 -3
- package/lib/history-turns.js.map +1 -1
- package/lib/history.js +57 -45
- package/lib/history.js.map +1 -1
- package/lib/hotkeys.js +44 -33
- package/lib/hotkeys.js.map +1 -1
- package/lib/i18n/index.d.ts +54 -0
- package/lib/i18n/index.js +98 -0
- package/lib/i18n/index.js.map +1 -0
- package/lib/i18n/registry.d.ts +65 -0
- package/lib/i18n/registry.js +129 -0
- package/lib/i18n/registry.js.map +1 -0
- package/lib/index.js +219 -109
- package/lib/index.js.map +1 -1
- package/lib/language-ask.d.ts +98 -0
- package/lib/language-ask.js +118 -0
- package/lib/language-ask.js.map +1 -0
- package/lib/live-widgets.js +9 -8
- package/lib/live-widgets.js.map +1 -1
- package/lib/login.js +5 -4
- package/lib/login.js.map +1 -1
- package/lib/messages.d.ts +0 -4
- package/lib/messages.js +14 -15
- package/lib/messages.js.map +1 -1
- package/lib/model-profiles.js +32 -20
- package/lib/model-profiles.js.map +1 -1
- package/lib/panels.js +18 -17
- package/lib/panels.js.map +1 -1
- package/lib/preflight-projcache.js +9 -3
- package/lib/preflight-projcache.js.map +1 -1
- package/lib/preset-dialog.d.ts +3 -3
- package/lib/preset-dialog.js +20 -17
- package/lib/preset-dialog.js.map +1 -1
- package/lib/provider-catalog.d.ts +23 -7
- package/lib/provider-catalog.js +90 -68
- package/lib/provider-catalog.js.map +1 -1
- package/lib/queue-panel.d.ts +2 -2
- package/lib/queue-panel.js +13 -9
- package/lib/queue-panel.js.map +1 -1
- package/lib/repair-dialog.d.ts +4 -4
- package/lib/repair-dialog.js +23 -16
- package/lib/repair-dialog.js.map +1 -1
- package/lib/route-dialog.d.ts +3 -3
- package/lib/route-dialog.js +20 -14
- package/lib/route-dialog.js.map +1 -1
- package/lib/selectors.d.ts +15 -1
- package/lib/selectors.js +57 -23
- package/lib/selectors.js.map +1 -1
- package/lib/sessions.d.ts +47 -14
- package/lib/sessions.js +162 -53
- package/lib/sessions.js.map +1 -1
- package/lib/settings.d.ts +68 -9
- package/lib/settings.js +327 -78
- package/lib/settings.js.map +1 -1
- package/lib/skills-manager.js +27 -21
- package/lib/skills-manager.js.map +1 -1
- package/lib/skills.js +5 -4
- package/lib/skills.js.map +1 -1
- package/lib/startup-info.js +9 -3
- package/lib/startup-info.js.map +1 -1
- package/lib/steer-flow.d.ts +14 -4
- package/lib/steer-flow.js +24 -9
- package/lib/steer-flow.js.map +1 -1
- package/lib/stop-dialog.d.ts +2 -2
- package/lib/stop-dialog.js +16 -12
- package/lib/stop-dialog.js.map +1 -1
- package/lib/subagent-viewer.d.ts +3 -8
- package/lib/subagent-viewer.js +38 -62
- package/lib/subagent-viewer.js.map +1 -1
- package/lib/theme-preview.js +12 -11
- package/lib/theme-preview.js.map +1 -1
- package/lib/theme-settings.d.ts +44 -2
- package/lib/theme-settings.js +97 -54
- package/lib/theme-settings.js.map +1 -1
- package/lib/tui.js +2 -1
- package/lib/tui.js.map +1 -1
- package/locales/en.json +646 -0
- package/locales/ja.json +646 -0
- package/locales/ko.json +646 -0
- package/locales/zh-CN.json +646 -0
- package/package.json +2 -1
- package/skills/dsh-tui-pi-config/SKILL.md +14 -4
|
@@ -0,0 +1,646 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "简体中文",
|
|
3
|
+
"command.language.description": "切换界面语言(/language 会弹出选择询问;/language <代码> 直接切换)",
|
|
4
|
+
"command.language.unknown": "未知语言「{id}」。已装:{list}",
|
|
5
|
+
"command.language.switched": "已切换到 {name}({id})。下一帧刷新即生效;已有对话内容保持原语言,直到重建。",
|
|
6
|
+
"command.language.persistFailed": "本次会话已切换,但保存偏好失败:{error}",
|
|
7
|
+
"command.language.unchanged": "界面语言未变。",
|
|
8
|
+
"command.language.unavailable": "当前没有可用的 ask-user 应答端来选语言。已装:{list} —— 请用 /language <代码>。",
|
|
9
|
+
"command.language.askFailed": "无法发起语言选择询问:{error}",
|
|
10
|
+
"settings.language.description": "界面语言:取 locales/ 内置目录或 ~/.dsh/locales 里的语言文件 id(如 'en'、'zh-CN');未知 id 回退到 'en'。下一帧刷新生效——/language 命令可即时切换",
|
|
11
|
+
"settings.theme.description": "终端配色('auto' 跟随终端;'light'/'dark' 是 GitHub 配色;其余值为自定义主题名)",
|
|
12
|
+
"settings.panelHeight.description": "思考/工具面板高度('1' = 单行:标识 + 耗时 + 最后一行,右侧截断;'5'/'7'/'10' = 盒式标题 + 内容行,边框另占 2 行;'all' = 全量内容——流式推理显示 200 行实时尾部,工具结果上限 2000 行)",
|
|
13
|
+
"settings.maxAgents.description": "子代理并发上限(0 = 不限)",
|
|
14
|
+
"settings.maxRounds.description": "每个子代理在 TUI 发出收尾请求前的助手消息轮数上限(0 = 不限)",
|
|
15
|
+
"settings.maxRoundsGrace.description": "收尾请求发出后子代理还能继续跑的轮数,超过即被 TUI 强制停止(0 = 仅提示,永不强停)",
|
|
16
|
+
"settings.disableSubagent.description": "禁用原生 subagent 工具(委托改走注册代理,~/.dsh/agents/*.md 经 use_agent);subagent_fork/workflow/ralph 仍可用",
|
|
17
|
+
"settings.registeredOnly.description": "除 use_agent 外封锁一切 spawn 工具:委托只能创建由注册代理定义(~/.dsh/agents/*.md)支撑的子代理;即席路径(subagent、subagent_fork、workflow、ralph)在守卫处拒绝",
|
|
18
|
+
"settings.footerHints.description": "要显示的 footer 快捷键提示(逐项开关)",
|
|
19
|
+
"settings.footerHints.send.description": "在 footer 提示栏显示 \"Enter: 发送\"",
|
|
20
|
+
"settings.footerHints.stop.description": "在 footer 提示栏显示 \"Esc ×2: 停止\"",
|
|
21
|
+
"settings.footerHints.quit.description": "在 footer 提示栏显示 \"Ctrl+C ×2: 退出\"",
|
|
22
|
+
"settings.footerHints.quitEmpty.description": "在 footer 提示栏显示 \"Ctrl+D: 退出(空输入)\"",
|
|
23
|
+
"settings.footerHints.subagents.description": "在 footer 提示栏显示 \"Ctrl+G: 子代理\"",
|
|
24
|
+
"settings.footerHints.search.description": "在 footer 提示栏显示 \"Ctrl+Shift+F: 搜索\"",
|
|
25
|
+
"settings.footerHints.history.description": "在 footer 提示栏显示 \"↑↓: 历史\"",
|
|
26
|
+
"settings.cacheHitMode.description": "footer CH 段的口径:'lastMessage' = 最近一条助手消息自己的命中率(与 pi-tui footer 一致);'session' = 整个会话输入流量的累计命中率。下一次 footer 重绘生效",
|
|
27
|
+
"settings.iconSet.description": "高风险字形的图标集('auto' = 启动时检测到 Nerd Font 则用 nerdfont,否则 plain;'nerdfont' = powerline PUA 字形(U+E0B0 分隔符、停止、实心圆);plain = 安全 Unicode 替代(▸ ■ ●)——推荐 auto)",
|
|
28
|
+
"settings.rememberPreset.description": "按工作区记住上次的 /preset 选择,下次在同一目录启动时直接用它(而非服务端默认)。false 则始终以服务端默认 preset 启动",
|
|
29
|
+
"settings.favoriteModels.description": "收藏的模型(provider/id 键),置顶在 /model 选择器顶部",
|
|
30
|
+
"settings.hiddenModels.description": "隐藏的模型(provider/id 键),移入 /model 选择器的 Hidden 区",
|
|
31
|
+
"settings.retention.description": "启动时清理 ~/.dsh/sessions 会话日志(这里显式写的值优先于 DSH_TUI_RETENTION_* 环境变量)",
|
|
32
|
+
"settings.retention.maxCount.description": "会话日志保留:最多保留这么多会话(<= 0 关闭清理);优先于 DSH_TUI_RETENTION_MAX_COUNT;下次启动生效",
|
|
33
|
+
"settings.retention.maxAgeDays.description": "会话日志保留:删除超过这么多天未动的日志(> 0);优先于 DSH_TUI_RETENTION_MAX_AGE_DAYS;下次启动生效",
|
|
34
|
+
"settings.retention.minIdleHours.description": "会话日志保留:仅按条数规则时的空闲保护,单位小时(>= 0);优先于 DSH_TUI_RETENTION_MIN_IDLE_HOURS;下次启动生效",
|
|
35
|
+
"settings.resume.description": "恢复选择器的显示过滤(这里显式写的值优先于 DSH_TUI_RESUME_* 环境变量)",
|
|
36
|
+
"settings.resume.maxAgeDays.description": "恢复选择器:只有日志活动落在这个窗口内的会话才出一行(> 0);优先于 DSH_TUI_RESUME_MAX_AGE_DAYS",
|
|
37
|
+
"settings.resume.minBytes.description": "恢复选择器:一行的最小压缩日志体积(>= 0);优先于 DSH_TUI_RESUME_MIN_BYTES",
|
|
38
|
+
"settings.askUser.description": "Ask User 提问面板的超时(这里显式写的值优先于 DSH_TUI_ASK_USER_* 环境变量)",
|
|
39
|
+
"settings.askUser.idleMinutes.description": "Ask User 面板:聚焦的问题超过这么多分钟没有任何按键就自动作答——未答问题取推荐项(列表第一项),计划永不自动批准;<= 0 关闭无输入规则;优先于 DSH_TUI_ASK_USER_IDLE_MINUTES",
|
|
40
|
+
"settings.askUser.absoluteMinutes.description": "Ask User 面板:单问题硬上限——超过这么多分钟即使用户仍在交互也自动作答(面板绝不能挟持整个运行);<= 0 关闭上限;优先于 DSH_TUI_ASK_USER_ABSOLUTE_MINUTES",
|
|
41
|
+
"ask.language.header": "语言",
|
|
42
|
+
"ask.language.question": "TUI 使用哪个界面语言?",
|
|
43
|
+
"ask.language.detail": "当前是 {current}。选中后立即生效——下一帧就用新语言(已有对话内容保持原语言,直到重建)——并写回 dsh-tui.language。",
|
|
44
|
+
"ask.language.current": "当前",
|
|
45
|
+
"ask.sentinel": "输入自定义回答。",
|
|
46
|
+
"ask.questionFallback": "问题 {n}",
|
|
47
|
+
"ask.confirmRow": "⏎ 确认回答",
|
|
48
|
+
"ask.col.selection": "选择",
|
|
49
|
+
"ask.title.single": "● 问题",
|
|
50
|
+
"ask.title.multi": "● 问题({index}/{total})",
|
|
51
|
+
"ask.empty": "(无问题)",
|
|
52
|
+
"ask.escHint": "再按一次 Esc 放弃回答",
|
|
53
|
+
"ask.footer.editing": "输入自由文本 · Enter 保留 · ↑↓ 移动 · Ctrl+T 折叠 · Esc 放弃",
|
|
54
|
+
"ask.footer.tabs": "←→ 切换页签 · ",
|
|
55
|
+
"ask.footer.navSelect": "↑↓ 移动 · Enter 选择 · 1-9 快选 · Ctrl+T 折叠 · Esc 放弃",
|
|
56
|
+
"ask.footer.navToggle": "↑↓ 移动 · Enter 勾选 · 1-9 快选 · Ctrl+T 折叠 · Esc 放弃",
|
|
57
|
+
"ask.review.title": "● 审阅回答",
|
|
58
|
+
"ask.review.colQuestion": "问题",
|
|
59
|
+
"ask.review.colAnswer": "你的回答",
|
|
60
|
+
"ask.review.submit": "提交回答",
|
|
61
|
+
"ask.review.ready": "✓ 就绪",
|
|
62
|
+
"ask.review.incomplete": "— 未答完",
|
|
63
|
+
"ask.review.footer": "↑↓ 选择 · Enter 返回编辑/提交 · Ctrl+T 折叠",
|
|
64
|
+
"ask.review.noAnswer": "(未回答)",
|
|
65
|
+
"ask.collapsed.esc": "再按一次 Esc 放弃回答 · Ctrl+T 展开",
|
|
66
|
+
"ask.collapsed.review": "● 待审阅回答 · Ctrl+T 展开",
|
|
67
|
+
"ask.collapsed.question": "● 问题待回答",
|
|
68
|
+
"ask.collapsed.questions": "● 问题({index}/{total} · 已答 {answered} 个)",
|
|
69
|
+
"ask.collapsed.expand": "Ctrl+T 展开",
|
|
70
|
+
"ask.autoIn": "{time} 后自动作答",
|
|
71
|
+
"ask.incomplete": "请先回答所有问题",
|
|
72
|
+
"ask.copied": "已复制",
|
|
73
|
+
"ask.notice.timeoutReview": "ask_user_question:已超时——提交了已给出的回答",
|
|
74
|
+
"ask.notice.timeoutAuto": "ask_user_question:已超时——未回答的问题自动选了推荐项(已在回答中注明)",
|
|
75
|
+
"ask.settings.invalid": "设置 dsh-tui.askUser.{key}:无效值 {value}——回退到环境变量/默认值",
|
|
76
|
+
"viewer.footer.running": "↑↓ 滚动 · Esc 关闭 · x ×2 停止 · Enter 转向",
|
|
77
|
+
"viewer.footer.settled": "↑↓ 滚动 · Esc 关闭 · x ×2 关闭 · Enter 转向",
|
|
78
|
+
"viewer.steer.footer": "Enter 发送 · Shift+Enter 换行 · Esc 取消",
|
|
79
|
+
"viewer.steer.sent": "转向消息已发送",
|
|
80
|
+
"viewer.steer.ended": "该子代理已结束——无法转向",
|
|
81
|
+
"viewer.steer.title": "转向 {label}",
|
|
82
|
+
"viewer.steer.hint": "以插件来源的用户消息送达。",
|
|
83
|
+
"viewer.title": "● 子代理",
|
|
84
|
+
"viewer.col.subagent": "子代理",
|
|
85
|
+
"viewer.col.stats": "统计",
|
|
86
|
+
"viewer.pickerFooter": "↑↓ 移动 · Enter 打开 · s 排序 · K 全部停止 · Esc 关闭",
|
|
87
|
+
"viewer.truncated": "…历史已截断(上限 {cap} 条事件)",
|
|
88
|
+
"viewer.hardStopped": "⏻ 已被 maxRounds 策略强制停止(第 {round} 轮 + 宽限耗尽,上限 {cap})",
|
|
89
|
+
"viewer.noEvents": " — 暂无事件 —",
|
|
90
|
+
"viewer.canceling": "⏹ 正在停止该子代理……",
|
|
91
|
+
"viewer.stopAllOne": "⏹ 全部停止:已取消 1 个子代理",
|
|
92
|
+
"viewer.stopAllMany": "⏹ 全部停止:已取消 {n} 个子代理",
|
|
93
|
+
"viewer.header.child": "ⓘ 子代理 {id}",
|
|
94
|
+
"viewer.status.running": "运行中",
|
|
95
|
+
"viewer.status.completed": "已完成",
|
|
96
|
+
"viewer.status.failed": "失败",
|
|
97
|
+
"viewer.status.cancelled": "已取消",
|
|
98
|
+
"viewer.route.think": "思考 {effort}",
|
|
99
|
+
"viewer.rounds": "轮次 {count}{cap}",
|
|
100
|
+
"viewer.hardStoppedAt": "⏻ 强制停止 @{round}",
|
|
101
|
+
"viewer.injected": "⚡ 已注入",
|
|
102
|
+
"viewer.stopped": "⏻ 已停止",
|
|
103
|
+
"viewer.event.turnStart": "– 轮次 {n} 开始",
|
|
104
|
+
"viewer.event.turnEnd": "– 轮次 {n} 结束 · {detail}",
|
|
105
|
+
"viewer.event.error": "错误",
|
|
106
|
+
"viewer.event.errorDetail": "错误:{message}",
|
|
107
|
+
"viewer.event.subagent": "子代理",
|
|
108
|
+
"viewer.event.todos": "☑ 待办 {done}/{total}:{summary}",
|
|
109
|
+
"agentsmg.error.integer": "应为非负整数,收到“{text}”",
|
|
110
|
+
"agentsmg.inherit": "(继承)",
|
|
111
|
+
"agentsmg.inheritWord": "继承",
|
|
112
|
+
"agentsmg.model.title": "● 模型",
|
|
113
|
+
"agentsmg.picker.colModel": "模型",
|
|
114
|
+
"agentsmg.picker.colProvider": "提供方",
|
|
115
|
+
"agentsmg.openFailed": "✘ 打开代理视图失败:{message}",
|
|
116
|
+
"agentsmg.title": "● 代理",
|
|
117
|
+
"agentsmg.col.name": "名称",
|
|
118
|
+
"agentsmg.col.model": "模型",
|
|
119
|
+
"agentsmg.col.deep": "深度",
|
|
120
|
+
"agentsmg.col.description": "描述",
|
|
121
|
+
"agentsmg.tableFooter": "↑↓ 移动 · Enter 打开 · Esc 返回 · l 限制",
|
|
122
|
+
"agentsmg.seededNote": "(已从 {dir} 导入 {n} 个)",
|
|
123
|
+
"agentsmg.updated": "代理已更新:{list}{note}",
|
|
124
|
+
"agentsmg.seededOnly": "已从 {dir} 导入 {n} 个代理——无更改。",
|
|
125
|
+
"agentsmg.noDescription": "(无描述)",
|
|
126
|
+
"agentsmg.target.profile": "model/think 修改将应用到档案“{name}”(工作区作用域——frontmatter 基线保持不变)",
|
|
127
|
+
"agentsmg.target.frontmatter": "无工作区配置档绑定——修改直接写入 frontmatter 基线(全局)",
|
|
128
|
+
"agentsmg.inheritDefault": "(继承——默认模型)",
|
|
129
|
+
"agentsmg.fieldsFooter": "↑↓ 字段 · Enter 编辑(m 模型 · t 思考 · d 深度)· v 完整提示词 · Esc 返回",
|
|
130
|
+
"agentsmg.savedModel": "已保存 {name} → {model}{think}{scope}",
|
|
131
|
+
"agentsmg.thinkSuffix": " · 思考 {effort}",
|
|
132
|
+
"agentsmg.scopeNote": "(档案“{name}”)",
|
|
133
|
+
"agentsmg.error.noModel": "✘ 未设置模型——请先选模型(m)",
|
|
134
|
+
"agentsmg.error.noLlm": "✘ llm 服务不可用",
|
|
135
|
+
"agentsmg.error.noThinkLevels": "✘ 无法解析 {model} 的思考级别",
|
|
136
|
+
"agentsmg.error.modelNoThink": "✘ {model} 未提供思考级别",
|
|
137
|
+
"agentsmg.savedThink": "已保存 {name} → 思考 {effort}{scope}",
|
|
138
|
+
"agentsmg.deep.title": "最大派生深度——{name}",
|
|
139
|
+
"agentsmg.deep.subtitle": "0 = 该代理从不派生子代理 · 无“不限”选项",
|
|
140
|
+
"agentsmg.deep.saved": "最大深度 {n} 已保存——在该代理被派生时生效",
|
|
141
|
+
"agentsmg.deep.status": "已保存 {name} → 最大深度 {n}",
|
|
142
|
+
"agentsmg.body.title": "ⓘ {name} · 系统提示词",
|
|
143
|
+
"agentsmg.body.footer": " Esc 关闭",
|
|
144
|
+
"agentsmg.limits.maxAgents": "{n} · 并发运行中的子代理数(0 = 不限)",
|
|
145
|
+
"agentsmg.limits.maxRounds": "{n} · 收尾前的助手消息数(0 = 不限)",
|
|
146
|
+
"agentsmg.limits.maxRoundsGrace": "{n} · 强制停止前的收尾轮数(0 = 仅警告)",
|
|
147
|
+
"agentsmg.limits.disableSubagent": "{value} · 原生 subagent 工具",
|
|
148
|
+
"agentsmg.limits.registeredOnly": "{value} · 仅 use_agent 可派生(subagent/fork/workflow/ralph 已封锁)",
|
|
149
|
+
"agentsmg.on": "开",
|
|
150
|
+
"agentsmg.off": "关",
|
|
151
|
+
"agentsmg.limits.title": "⚙ 子代理",
|
|
152
|
+
"agentsmg.limits.footer": "↑↓ 字段 · Enter 编辑(0 = 不限)· d 切换 subagent · r 仅注册代理 · Esc 返回",
|
|
153
|
+
"agentsmg.limits.intro": "子代理委派开关——每次派生/轮次决策时实时读取",
|
|
154
|
+
"agentsmg.limits.runtime": "运行时:{live} 个运行中 · {allowed} 个已准入 · {denied} 个已拒绝 · {pruned} 个已剪除 · {inFlight} 个进行中(自 TUI 启动起)",
|
|
155
|
+
"agentsmg.limits.noAgents": "{dir} 中还没有代理——放入一个 markdown 文件即可定义",
|
|
156
|
+
"agentsmg.limits.broken": "已忽略 {n} 个损坏文件",
|
|
157
|
+
"agentsmg.limit.title": "{key}——子代理委派上限(当前 {current})",
|
|
158
|
+
"agentsmg.limit.subtitle": "非负整数 · 0 = 不限 · 留空保持当前值",
|
|
159
|
+
"agentsmg.limit.saved": "{key} → {n} 已保存——对之后的子代理派生生效",
|
|
160
|
+
"agentsmg.subagent.disabled": "subagent 工具已禁用——对之后的子代理派生生效",
|
|
161
|
+
"agentsmg.subagent.enabled": "subagent 工具已启用——对之后的子代理派生生效",
|
|
162
|
+
"agentsmg.fence.on": "仅注册围栏开启——只有 use_agent 可派生",
|
|
163
|
+
"agentsmg.fence.off": "仅注册围栏关闭——临时派生工具可用",
|
|
164
|
+
"queue.footer": "↑↓ 选择 · d 移除 · s 立即转向 · Esc 关闭",
|
|
165
|
+
"queue.refreshFailed": "队列状态刷新失败——下方列表可能已过期。",
|
|
166
|
+
"queue.target.steer": "↪ 转向",
|
|
167
|
+
"queue.target.queued": "⏳ 排队中",
|
|
168
|
+
"queue.title": "待发消息",
|
|
169
|
+
"queue.empty": "— 暂无待发消息 —",
|
|
170
|
+
"skillsmgr.reason.notSymlink": "非符号链接",
|
|
171
|
+
"skillsmgr.reason.differentSource": "来源不同",
|
|
172
|
+
"skillsmgr.reason.sourceMissing": "来源缺失",
|
|
173
|
+
"skillsmgr.reason.destMissing": "目标缺失",
|
|
174
|
+
"skillsmgr.reason.failed": "失败",
|
|
175
|
+
"skillsmgr.summary.more": " 另有 {n} 项",
|
|
176
|
+
"skillsmgr.summary.ok": "成功:{list}",
|
|
177
|
+
"skillsmgr.summary.applied": "已应用 {ok}/{total}——{okPart}失败:{failed}",
|
|
178
|
+
"skillsmgr.title": "⚙ 技能管理",
|
|
179
|
+
"skillsmgr.unsaved": "({n} 项未保存)",
|
|
180
|
+
"skillsmgr.noMatches": "没有匹配“{query}”的技能",
|
|
181
|
+
"skillsmgr.col.on": "启用",
|
|
182
|
+
"skillsmgr.col.skill": "技能",
|
|
183
|
+
"skillsmgr.footer.confirm": "放弃未保存的更改?Y/N",
|
|
184
|
+
"skillsmgr.footer.filter": "过滤:{query} · Backspace 清除 · Esc 清除过滤",
|
|
185
|
+
"skillsmgr.footer.dirty": "↑↓ 移动 · 空格 切换 · Enter 应用 · Esc 放弃",
|
|
186
|
+
"skillsmgr.footer.idle": "↑↓ 移动 · PgUp/PgDn 翻页 · Home/End 跳转 · 空格 切换 · Enter 应用 · Esc 返回",
|
|
187
|
+
"skillsmgr.scanning": "正在扫描公共技能……",
|
|
188
|
+
"skillsmgr.empty": "~/.agents/skills/ 中未找到公共技能。",
|
|
189
|
+
"skillsmgr.readError": "无法读取 ~/.agents/skills/。",
|
|
190
|
+
"skills.error.cannotRead": "无法读取技能文件:{path}",
|
|
191
|
+
"skills.error.missingFrontmatter": "缺少 frontmatter(文件必须以 `---` 开头)",
|
|
192
|
+
"skills.error.missingCloseFence": "缺少 frontmatter 结束围栏",
|
|
193
|
+
"skills.error.cannotWrite": "无法写入技能文件:{message}",
|
|
194
|
+
"btw.error.noQuestion": "/btw --model 后没有问题。",
|
|
195
|
+
"btw.error.invalidModel": "无效的 --model “{model}”——应为 provider/model。",
|
|
196
|
+
"btw.queueFull": "btw 队列已满({cap})",
|
|
197
|
+
"btw.error.unknownStream": "未知的模型流错误。",
|
|
198
|
+
"btw.error.maxTokens": "回答达到输出 token 上限。",
|
|
199
|
+
"btw.error.toolCalls": "旁路模型意外请求了工具。",
|
|
200
|
+
"btw.error.unsupportedFinish": "不支持的流结束类型:{kind}",
|
|
201
|
+
"btw.error.noFinish": "模型流结束但没有 finish 块。",
|
|
202
|
+
"btw.error.noModel": "未选择模型——btw 无法运行。",
|
|
203
|
+
"btw.error.modelUnavailable": "btw 模型“{model}”不可用。",
|
|
204
|
+
"btw.background": "btw 正在后台运行——用 /btw 查看回答。",
|
|
205
|
+
"btw.failed": "btw 失败:{message}",
|
|
206
|
+
"btw.notice.idle": "/btw 是在主任务运行时旁路提问的——现在主线空闲,直接问就行。",
|
|
207
|
+
"btw.notice.usage": "用法:/btw <问题> —— 在主任务运行时旁路提一个问题。回答流式显示在临时浮层里,不保留在会话中。",
|
|
208
|
+
"misc.attachment.loading": "🖼 {name}——加载中({width}×{height})",
|
|
209
|
+
"misc.attachment.more": "🖼 还有 {n} 张图片未显示",
|
|
210
|
+
"misc.attachment.unavailable": "🖼 {name}——无法加载{code}",
|
|
211
|
+
"misc.todos.title": "● 待办 ",
|
|
212
|
+
"misc.todos.showing": " · 显示 {ranges}",
|
|
213
|
+
"misc.todos.task": "任务",
|
|
214
|
+
"misc.agent.rounds": "轮次 {n}{cap}",
|
|
215
|
+
"misc.agent.fallbackName": "子代理",
|
|
216
|
+
"misc.pending.queued": "⏳ 排队中",
|
|
217
|
+
"misc.pending.steer": "↪ 转向",
|
|
218
|
+
"misc.pending.canceled": "✕ 已取消",
|
|
219
|
+
"misc.pending.notDelivered": "✘ 未送达",
|
|
220
|
+
"misc.turnFailed": "轮次失败",
|
|
221
|
+
"misc.interrupted": "已中断",
|
|
222
|
+
"misc.tokenLimit": "⚠ 已达输出 token 上限",
|
|
223
|
+
"stop.confirm.title": "● 停止一切 LLM 工作?",
|
|
224
|
+
"stop.confirm.mainRunning": "主回合正在生成",
|
|
225
|
+
"stop.confirm.childrenOne": "{count} 个子代理正在运行",
|
|
226
|
+
"stop.confirm.childrenMany": "{count} 个子代理正在运行",
|
|
227
|
+
"stop.confirm.joiner": ",且",
|
|
228
|
+
"stop.confirm.situation": "当前{parts}。",
|
|
229
|
+
"stop.confirm.idle": "当前没有正在运行的任务。",
|
|
230
|
+
"stop.confirm.reassure": "确认后会取消主回合和所有运行中的子代理。排队消息会保留,会话仍可恢复。",
|
|
231
|
+
"stop.option.stop": "全部停止——取消主回合和所有子代理",
|
|
232
|
+
"stop.option.cancel": "取消——保持一切运行",
|
|
233
|
+
"stop.footer": "↑↓ 选择 · 1/2 选取 · Enter 确认 · Esc 继续运行",
|
|
234
|
+
"repair.confirm.title": "● 恢复日志已损坏",
|
|
235
|
+
"repair.confirm.body": "恢复日志已损坏(可能由历史上的双重写入导致)。要就地修复吗?原文件会保留为 .corrupt-bak。",
|
|
236
|
+
"repair.option.repair": "修复并恢复",
|
|
237
|
+
"repair.option.repairHint": "就地重建日志,然后进入该会话",
|
|
238
|
+
"repair.option.cancel": "取消",
|
|
239
|
+
"repair.option.cancelHint": "保持日志原样",
|
|
240
|
+
"repair.footer": "↑↓ 选择 · 1/2 选取 · Enter 确认 · Esc 取消",
|
|
241
|
+
"presetdlg.title.switch": "● 切换 preset 到 {name}?",
|
|
242
|
+
"presetdlg.title.restart": "● 在 {name} 上重启会话?",
|
|
243
|
+
"presetdlg.fork.switch": "分叉并切换——在 {name} 上开新会话,携带当前对话",
|
|
244
|
+
"presetdlg.fork.restart": "分叉并重启——在 {name} 上开新会话,携带当前对话",
|
|
245
|
+
"presetdlg.fresh.switch": "全新开始——在 {name} 上开新的空会话",
|
|
246
|
+
"presetdlg.fresh.restart": "立即重启——在 {name} 上开新的空会话",
|
|
247
|
+
"presetdlg.point.switch": "切换会在 {name} 上开启一个新会话。",
|
|
248
|
+
"presetdlg.point.restart": "重启会在 {name} 上开启一个新会话。",
|
|
249
|
+
"presetdlg.option.cancel": "取消——留在当前会话",
|
|
250
|
+
"presetdlg.carry": "分叉会把当前对话带入新会话(含压缩后的上下文)——全新开始则是空会话。",
|
|
251
|
+
"presetdlg.footer": "↑↓ 选择 · 1/2/3 选取 · Enter 确认 · Esc 取消",
|
|
252
|
+
"presetdlg.echo.unchanged": "preset 未变——仍在当前会话。",
|
|
253
|
+
"presetdlg.echo.forked": "preset → {name}——已从当前对话分叉出新会话。",
|
|
254
|
+
"presetdlg.echo.fresh": "preset → {name}——已在其上开启新的空会话。",
|
|
255
|
+
"presetdlg.echo.direct": "preset → {name}——已在其上开启新会话。",
|
|
256
|
+
"route.title": "代理正在运行——请选择这条消息的去向",
|
|
257
|
+
"route.preview.empty": "(空消息)",
|
|
258
|
+
"route.option.followup": "排队为追加提问",
|
|
259
|
+
"route.option.followupHint": "当前回合结束时送达",
|
|
260
|
+
"route.option.steer": "立即转向",
|
|
261
|
+
"route.option.steerHint": "在下一个步骤边界注入",
|
|
262
|
+
"route.footer": "↑↓ 选择 · 1/2 选取 · Enter 确认 · Esc 取消",
|
|
263
|
+
"fork.title": "● 在第 {turn} 轮分叉?",
|
|
264
|
+
"fork.body.carry": "新会话将携带到第 {turn} 轮(共 {total} 轮)为止的内容;之后的轮次留在当前会话中。",
|
|
265
|
+
"fork.body.resume": "当前会话仍可通过 /resume 恢复。",
|
|
266
|
+
"fork.body.detach": "你的活动会话 {id} 将被分离——它仍可通过 /resume 恢复。",
|
|
267
|
+
"fork.option.fork": "立即分叉——开一个到第 {turn} 轮为止的新会话",
|
|
268
|
+
"fork.option.cancel": "取消",
|
|
269
|
+
"fork.footer": "↑↓ 选择 · 1/2 选取 · Enter 确认 · Esc 取消",
|
|
270
|
+
"steer.notice.unavailable": "转向不可用——消息已保留为追加提问排队。",
|
|
271
|
+
"steer.notice.turnEnded": "这一轮在转向落地前已结束——消息已排队为追加提问。",
|
|
272
|
+
"steer.notice.removed": "已从待发队列移除。",
|
|
273
|
+
"steer.notice.promoted": "已提前发送——正在转向当前回合。",
|
|
274
|
+
"steer.notice.notFound": "已被认领或已移除——列表已刷新。",
|
|
275
|
+
"steer.notice.error": "✘ {error}",
|
|
276
|
+
"steer.notice.orphaned": "{error}——消息已离开队列但未送达;请重新提交。",
|
|
277
|
+
"history.footer": "↑↓ 导航 · Enter/c 复制 · f 分叉 · → 详情 · s 会话 · / 过滤 · Esc 关闭",
|
|
278
|
+
"history.noText": "(无文本)",
|
|
279
|
+
"history.listTitle": "● 历史 · {id}",
|
|
280
|
+
"history.liveTag": "(实时)",
|
|
281
|
+
"history.moreLines": "… 还有 {count} 行",
|
|
282
|
+
"history.turnFailed": "轮次失败",
|
|
283
|
+
"history.interrupted": "已中断",
|
|
284
|
+
"history.maxTokens": "已达输出 token 上限",
|
|
285
|
+
"history.truncated": "… 还有 {count} 行被截断——{pointer}查看完整轮",
|
|
286
|
+
"history.emptyTurn": "(该轮未产生提示词或回复文本)",
|
|
287
|
+
"history.title": "历史",
|
|
288
|
+
"history.turnTitle": "第 {turn} 轮",
|
|
289
|
+
"history.liveSnapshot": "实时快照",
|
|
290
|
+
"history.selectTurn": "请在左侧选择一个轮。",
|
|
291
|
+
"history.lineOne": "{count} 行",
|
|
292
|
+
"history.lineMany": "{count} 行",
|
|
293
|
+
"history.linesRange": "{start}–{end}/{total} 行",
|
|
294
|
+
"history.detailFooterFocused": "← 列表 · ↑↓ 滚动 · [ / ] 翻页 · {window}",
|
|
295
|
+
"history.detailFooterIdle": "[ / ] 翻页 · {window}",
|
|
296
|
+
"history.corruptLog": "⚠ {id}:会话日志已损坏——可用 /resume {id} 修复。",
|
|
297
|
+
"history.cannotRead": "无法读取 {id}:{message}",
|
|
298
|
+
"history.noPersistence": "当前 profile 未配置会话持久化。",
|
|
299
|
+
"history.noCwd": "无目录",
|
|
300
|
+
"history.col.turn": "轮",
|
|
301
|
+
"history.col.prompt": "提示词",
|
|
302
|
+
"history.col.updated": "更新时间",
|
|
303
|
+
"history.col.dir": "目录",
|
|
304
|
+
"history.col.session": "会话",
|
|
305
|
+
"history.empty": "暂无已完成的轮",
|
|
306
|
+
"history.closed": "历史浏览已关闭。",
|
|
307
|
+
"history.nothingToCopy": "没有可复制的内容——该轮没有用户提示词。",
|
|
308
|
+
"history.copied": "提示词已复制到编辑器。",
|
|
309
|
+
"history.pickerTitle": "● 浏览会话",
|
|
310
|
+
"history.pickerFooter": "↑↓ 导航 · Enter 浏览 · / 过滤 · Esc 返回",
|
|
311
|
+
"history.noMatching": "没有匹配的会话",
|
|
312
|
+
"history.forked": "已在第 {turn} 轮分叉,新会话已开启。",
|
|
313
|
+
"history.forkFailed": "分叉失败:{message}",
|
|
314
|
+
"history.forkAtTurnFailed": "在第 {turn} 轮分叉失败:{message}",
|
|
315
|
+
"history.noStored": "没有可浏览的已存储会话。",
|
|
316
|
+
"history.noActive": "没有活动会话——请用 /history <sessionId> 浏览已存储的会话。",
|
|
317
|
+
"history.openFailed": "打开历史查看器失败。",
|
|
318
|
+
"turns.toolCallOne": "次工具调用",
|
|
319
|
+
"turns.toolCallMany": "次工具调用",
|
|
320
|
+
"resume.title": "● 恢复会话",
|
|
321
|
+
"resume.headingTitle": "ⓘ {title} · token:当前路由",
|
|
322
|
+
"resume.headingPlain": "ⓘ 会话 · token:当前路由",
|
|
323
|
+
"resume.empty": "没有活跃会话——发送一条提示词,或用 /resume 恢复一个",
|
|
324
|
+
"resume.field.session": "会话",
|
|
325
|
+
"resume.field.cwd": "工作目录",
|
|
326
|
+
"resume.field.created": "创建时间",
|
|
327
|
+
"resume.field.model": "模型",
|
|
328
|
+
"resume.field.think": "思考",
|
|
329
|
+
"resume.field.status": "状态",
|
|
330
|
+
"resume.field.messages": "消息数",
|
|
331
|
+
"resume.field.toolcalls": "工具调用",
|
|
332
|
+
"resume.field.tokensin": "输入 token",
|
|
333
|
+
"resume.field.tokensout": "输出 token",
|
|
334
|
+
"resume.field.cacheread": "缓存读取",
|
|
335
|
+
"resume.field.cachewrite": "缓存写入",
|
|
336
|
+
"resume.field.events": "事件数",
|
|
337
|
+
"resume.field.parent": "父会话",
|
|
338
|
+
"resume.col.field": "字段",
|
|
339
|
+
"resume.col.value": "值",
|
|
340
|
+
"resume.col.updated": "更新时间",
|
|
341
|
+
"resume.col.dir": "目录",
|
|
342
|
+
"resume.col.session": "会话",
|
|
343
|
+
"resume.hintEdit": "Enter 保存 · Esc 取消",
|
|
344
|
+
"resume.renameEmpty": "重命名 ▸ {cursor}(输入标题)",
|
|
345
|
+
"resume.renameEdit": "重命名 ▸ {buffer}{cursor}",
|
|
346
|
+
"resume.hintRename": "r 重命名 · Esc 关闭",
|
|
347
|
+
"resume.hintClose": "Esc 关闭",
|
|
348
|
+
"resume.titleEmpty": "标题为空",
|
|
349
|
+
"resume.noBackend": "会话持久化未提供 open() 或 inspect() 接口。",
|
|
350
|
+
"resume.noPersistence": "当前 profile 未配置会话持久化。",
|
|
351
|
+
"resume.settingInvalid": "设置 dsh-tui.resume.{key}:无效值 {value}——回退到环境变量/默认值",
|
|
352
|
+
"resume.listFailed": "列出已持久化会话失败:{message}",
|
|
353
|
+
"resume.noCwd": "无目录",
|
|
354
|
+
"tui.esc.armStop": "再按一次 Esc 停止所有 LLM 任务",
|
|
355
|
+
"tui.esc.quitArmed": "{icon} Ctrl+C ×2,正在退出…",
|
|
356
|
+
"tui.esc.quitAborted": "已取消退出——Ctrl+C 是长按,不是双击",
|
|
357
|
+
"tui.stop.stopping": "{icon} 正在停止所有 LLM 任务…",
|
|
358
|
+
"tui.stop.nothingRunning": "当前没有正在运行的任务。",
|
|
359
|
+
"tui.keys.warningPrefix": "keybindings:{warning}",
|
|
360
|
+
"tui.status.working": "处理中…",
|
|
361
|
+
"tui.takeover.writeLock": "已获得写锁——排队的消息已发送。",
|
|
362
|
+
"tui.session.none": "当前没有活跃会话。",
|
|
363
|
+
"tui.session.infoShown": "已显示会话信息。",
|
|
364
|
+
"tui.session.renamed": "已重命名为「{title}」",
|
|
365
|
+
"tui.session.titleEmpty": "标题规范化后为空",
|
|
366
|
+
"tui.session.effortDefault": "provider 默认",
|
|
367
|
+
"tui.btw.noLlm": "LLM 服务不可用。",
|
|
368
|
+
"tui.btw.backOnScreen": "btw——正在生成的回答已重新显示。",
|
|
369
|
+
"tui.btw.lastShown": "已显示上一次 btw 交流。",
|
|
370
|
+
"tui.btw.started": "btw——在主任务进行的同时作答。",
|
|
371
|
+
"tui.btw.queued": "btw 已排队(位置 {position})。",
|
|
372
|
+
"tui.btw.rejected": "btw 被拒绝——{reason}。",
|
|
373
|
+
"tui.model.unchanged": "模型未更改。",
|
|
374
|
+
"tui.agents.unchanged": "代理未更改。",
|
|
375
|
+
"tui.subagents.viewerClosed": "子代理查看器已关闭。",
|
|
376
|
+
"tui.model.selected": "模型:{id}",
|
|
377
|
+
"tui.model.selectedThink": "模型:{id} · think {effort}",
|
|
378
|
+
"tui.persist.failed": "{text} · ⚠ 未持久化:{error}",
|
|
379
|
+
"tui.think.noModel": "尚未选择模型——请先用 /model 选择。",
|
|
380
|
+
"tui.think.unsupported": "{id} 没有可选的 think 档位。",
|
|
381
|
+
"tui.think.unchanged": "think 档位未更改。",
|
|
382
|
+
"tui.think.providerDefault": "think:provider 默认({id})。",
|
|
383
|
+
"tui.think.set": "think:{effort}({id})。",
|
|
384
|
+
"tui.preset.memorySaveFailed": "预设记忆未保存:{error}",
|
|
385
|
+
"tui.preset.none": "没有可用的代理预设。",
|
|
386
|
+
"tui.preset.unknown": "未知预设:{name}",
|
|
387
|
+
"tui.preset.unchanged": "预设未更改。",
|
|
388
|
+
"tui.resume.noneOther": "没有其他可恢复的持久化会话。",
|
|
389
|
+
"tui.resume.windowEmpty": "恢复窗口内没有会话({days} 天,≥{floor})——调整 dsh-tui.resume.* 可显示更多。",
|
|
390
|
+
"tui.resume.cancelled": "已取消恢复。",
|
|
391
|
+
"tui.resume.watching": "正在只读旁观 {id}(由另一个进程驱动)。用 /resume 或 /new 切换。",
|
|
392
|
+
"tui.resume.watchFailed": "无法只读旁观 {id}:{error}",
|
|
393
|
+
"tui.resume.failed": "恢复失败:{error}——原会话已关闭;下一条消息将开启新会话。",
|
|
394
|
+
"tui.resume.done": "已恢复 {id} · {count} 个事件。",
|
|
395
|
+
"tui.resume.cannot": "无法恢复 {id}:{error}",
|
|
396
|
+
"tui.repair.logMissing": "修复失败:无法在磁盘上定位 {id} 的日志——日志未改动",
|
|
397
|
+
"tui.repair.failed": "修复失败:{error}——日志未改动",
|
|
398
|
+
"tui.boot.resumeFailed": "--resume {id}:{error}——改为全新会话。",
|
|
399
|
+
"tui.export.noSession": "没有可导出的活跃会话。",
|
|
400
|
+
"tui.export.done": "已导出 {count} 个事件 → {path}",
|
|
401
|
+
"tui.new.done": "已开启新会话。",
|
|
402
|
+
"tui.settings.unavailable": "设置服务不可用。",
|
|
403
|
+
"tui.settings.noNamespaces": "没有已注册的设置命名空间。",
|
|
404
|
+
"tui.settings.noChanges": "设置:无更改。",
|
|
405
|
+
"tui.settings.appliedOne": "设置:已应用 {count} 项更改。",
|
|
406
|
+
"tui.settings.appliedMany": "设置:已应用 {count} 项更改。",
|
|
407
|
+
"tui.skills.opened": "已打开技能管理器。",
|
|
408
|
+
"tui.theme.unchanged": "主题未更改。",
|
|
409
|
+
"tui.theme.pinned": "主题偏好已保存——显示由 DSH_TUI_THEME={value} 固定",
|
|
410
|
+
"tui.theme.applied": "主题:{name}——已应用。",
|
|
411
|
+
"tui.hotkeys.unchanged": "快捷键未更改。",
|
|
412
|
+
"tui.login.unknownProvider": "未知 provider「{name}」——运行 /login 从目录中选择。",
|
|
413
|
+
"tui.login.cancelled": "已取消登录。",
|
|
414
|
+
"tui.login.configured": "provider {name} 已配置。",
|
|
415
|
+
"tui.logout.none": "没有可移除的已存凭据。",
|
|
416
|
+
"tui.logout.cancelled": "已取消登出。",
|
|
417
|
+
"tui.logout.failed": "移除 {name} 的已存 API key 失败{cause}。",
|
|
418
|
+
"tui.logout.incomplete": "已移除 {name} 的 API key,但其 provider 配置仍保留:{error}——请在 /settings 中移除该 provider 以完成登出。",
|
|
419
|
+
"tui.logout.keyOnly": "已移除 {name} 的 API key。手工声明的路由——其配置仍保留;请在 /settings 中移除该 provider 以同时移除其模型。",
|
|
420
|
+
"tui.logout.done": "已登出 {name}——API key 与 provider 配置均已移除。",
|
|
421
|
+
"tui.permission.unchanged": "权限未更改。",
|
|
422
|
+
"tui.steer.queuedFollowup": "追加提问已排队——写锁释放后自动发送。",
|
|
423
|
+
"tui.steer.noSession": "当前没有活跃会话——消息未送达。",
|
|
424
|
+
"tui.exit.resumeHint": "恢复此会话:{command}",
|
|
425
|
+
"tui.cmd.btw.description": "在主任务运行时提出附带提问(临时浮层,不保留)",
|
|
426
|
+
"tui.cmd.model.description": "选择本次对话的模型(及 think 档位)",
|
|
427
|
+
"tui.cmd.agents.description": "从 markdown 文件管理代理定义(模型、think 档位、派生深度)",
|
|
428
|
+
"tui.cmd.subagents.description": "浏览子代理并查看其实时对话记录",
|
|
429
|
+
"tui.cmd.think.description": "切换当前模型的 think(推理)档位",
|
|
430
|
+
"tui.cmd.preset.description": "切换代理预设(在其上开启新会话;/preset next 依次轮换)",
|
|
431
|
+
"tui.cmd.session.description": "查看当前会话信息(id、标题、统计)并可重命名(r)",
|
|
432
|
+
"tui.cmd.resume.description": "恢复一个持久化会话",
|
|
433
|
+
"tui.cmd.history.description": "浏览会话的历史轮次(只读;/history <id> 查看已存储的会话)",
|
|
434
|
+
"tui.cmd.export.description": "将本次会话日志导出为 JSONL",
|
|
435
|
+
"tui.cmd.new.description": "开启新会话",
|
|
436
|
+
"tui.cmd.settings.description": "浏览并编辑配置(命名空间、值、重置)",
|
|
437
|
+
"tui.cmd.skills.description": "管理用户技能(已安装与可用)",
|
|
438
|
+
"tui.cmd.theme.description": "设置终端配色方案(立即生效)",
|
|
439
|
+
"tui.cmd.reload.description": "从当前源码重载 TUI(无需重启 dsh 即可应用代码变更)",
|
|
440
|
+
"tui.cmd.hotkeys.description": "查看当前快捷键(自定义文件:~/.dsh/keybindings.json)",
|
|
441
|
+
"tui.cmd.login.description": "通过 provider 目录登记 provider 凭据(API key)",
|
|
442
|
+
"tui.cmd.logout.description": "登出一个 provider(移除其 API key 与 provider 配置)",
|
|
443
|
+
"settingsui.group.subagent": "子代理",
|
|
444
|
+
"settingsui.title": "⚙ 设置",
|
|
445
|
+
"settingsui.category.dsh-tui": "TUI",
|
|
446
|
+
"settingsui.category.general": "通用",
|
|
447
|
+
"settingsui.category.models": "模型",
|
|
448
|
+
"settingsui.category.plugins": "插件",
|
|
449
|
+
"settingsui.category.agent": "代理预设",
|
|
450
|
+
"settingsui.category.other": "其他",
|
|
451
|
+
"settingsui.summary.namespaces": "{count} 个命名空间",
|
|
452
|
+
"settingsui.fields.count": "{count} 个字段",
|
|
453
|
+
"settingsui.ns.applies": "生效时机:{applies}",
|
|
454
|
+
"settingsui.value.unset": "(未设置)",
|
|
455
|
+
"settingsui.value.items": "[共 {count} 项]",
|
|
456
|
+
"settingsui.value.keys": "{count} 个键",
|
|
457
|
+
"settingsui.dict.one": "字典 · {count} 项",
|
|
458
|
+
"settingsui.dict.many": "字典 · {count} 项",
|
|
459
|
+
"settingsui.meta.required": "必填",
|
|
460
|
+
"settingsui.meta.default": "默认:{value}",
|
|
461
|
+
"settingsui.meta.min": "最小:{value}",
|
|
462
|
+
"settingsui.meta.max": "最大:{value}",
|
|
463
|
+
"settingsui.meta.step": "步长:{value}",
|
|
464
|
+
"settingsui.meta.pattern": "正则:{value}",
|
|
465
|
+
"settingsui.meta.secret": "密文",
|
|
466
|
+
"settingsui.meta.disabled": "已禁用",
|
|
467
|
+
"settingsui.meta.userSet": "用户设置",
|
|
468
|
+
"settingsui.edit.footer": "Enter 保存 · Esc 返回",
|
|
469
|
+
"settingsui.edit.secret": "密文——留空则保留当前值",
|
|
470
|
+
"settingsui.edit.current": "当前:{value}",
|
|
471
|
+
"settingsui.parse.number": "应为数字,实际为「{text}」",
|
|
472
|
+
"settingsui.parse.json": "应为 JSON 值(数字、布尔、字符串等)",
|
|
473
|
+
"settingsui.parse.type": "无法编辑 {type} 类型的值",
|
|
474
|
+
"settingsui.reset.working": "重置中…",
|
|
475
|
+
"settingsui.reset.hints": "Enter:重置为默认 · Esc:取消",
|
|
476
|
+
"settingsui.reset.namespace": "将此命名空间重置为默认值",
|
|
477
|
+
"settingsui.reset.path": "将 {path} 重置为默认值",
|
|
478
|
+
"settingsui.reset.ns": "将「{ns}」重置为默认值",
|
|
479
|
+
"settingsui.addKey.label": "+ 添加键…",
|
|
480
|
+
"settingsui.addKey.title": "在 {path} 中添加键",
|
|
481
|
+
"settingsui.addKey.subtitle": "默认:{default} · Enter 添加 · Esc 取消",
|
|
482
|
+
"settingsui.addKey.empty": "键名不能为空",
|
|
483
|
+
"settingsui.addKey.exists": "键「{key}」已存在",
|
|
484
|
+
"settingsui.addProvider.title": "⚙ 添加提供方",
|
|
485
|
+
"settingsui.addProvider.empty": "内置提供方均已配置。",
|
|
486
|
+
"settingsui.escClose": "按 Esc 关闭",
|
|
487
|
+
"settingsui.addProvider.keyTitle": "{name} 的 API 密钥",
|
|
488
|
+
"settingsui.addProvider.keySubtitle": "存为 {ref}——绝不写入 settings.yaml",
|
|
489
|
+
"settingsui.addProvider.keyRequired": "API 密钥不能为空",
|
|
490
|
+
"settingsui.commit.noCredentials": "提供方已添加——本进程没有凭据服务:请先 export {ref} 再使用",
|
|
491
|
+
"settingsui.commit.keyFailed": "API 密钥未存入:{cause}——提供方已添加;请设置 {ref}=<密钥> 后使用",
|
|
492
|
+
"settingsui.models.title": "⚙ 模型",
|
|
493
|
+
"settingsui.models.readonly": "TUI 内只读——修改请编辑设置文档",
|
|
494
|
+
"settingsui.models.deepseek": "DeepSeek(官方)",
|
|
495
|
+
"settingsui.models.defaultModel": "默认模型",
|
|
496
|
+
"settingsui.models.add": "+ 添加提供方…",
|
|
497
|
+
"settingsui.models.addDesc": "用 API 密钥配置一个内置提供方",
|
|
498
|
+
"settingsui.route.think": "{provider}/{model} · 思考 {effort}",
|
|
499
|
+
"themepv.title": "● 主题",
|
|
500
|
+
"themepv.col.theme": "主题",
|
|
501
|
+
"themepv.footer": "↑↓ 选择 · Enter 确认 · Esc 返回",
|
|
502
|
+
"themepv.desc.auto": "跟随终端亮/暗信号",
|
|
503
|
+
"themepv.desc.githubLight": "GitHub 亮色配色",
|
|
504
|
+
"themepv.desc.githubDark": "GitHub 暗色配色",
|
|
505
|
+
"themepv.origin.user": "用户主题",
|
|
506
|
+
"themepv.origin.builtin": "内置",
|
|
507
|
+
"themepv.auto.follows": "主题跟随终端。",
|
|
508
|
+
"themepv.auto.pick": "选择 light/dark 或具名主题即可预览。",
|
|
509
|
+
"themepv.input.placeholder": "输入消息…",
|
|
510
|
+
"sel.effort.default": "(提供方默认)",
|
|
511
|
+
"sel.effort.defaultDesc": "适配器默认行为——清除思考力度覆盖",
|
|
512
|
+
"sel.col.description": "说明",
|
|
513
|
+
"sel.col.effort": "力度",
|
|
514
|
+
"sel.col.language": "语言",
|
|
515
|
+
"sel.col.model": "模型",
|
|
516
|
+
"sel.col.provider": "提供方",
|
|
517
|
+
"sel.col.preset": "预设",
|
|
518
|
+
"sel.title.effort": "● 思考力度",
|
|
519
|
+
"sel.title.language": "● 界面语言",
|
|
520
|
+
"sel.title.model": "● 模型",
|
|
521
|
+
"sel.title.permission": "● 权限预设",
|
|
522
|
+
"sel.title.preset": "● 代理预设",
|
|
523
|
+
"sel.hidden.header": "─ 隐藏({count})─",
|
|
524
|
+
"sel.footer.model": "↑↓ 选择 · Enter 确认 · f 收藏 · h 隐藏 · / 过滤 · Esc 返回",
|
|
525
|
+
"sel.status.saveFailed": "✘ 保存失败:{message}",
|
|
526
|
+
"sel.preset.shipped": "内置预设",
|
|
527
|
+
"sel.preset.user": "用户预设",
|
|
528
|
+
"modelprof.error.nameEmpty": "档案名不能为空",
|
|
529
|
+
"modelprof.error.exists": "已存在同名档案「{name}」",
|
|
530
|
+
"modelprof.error.notFound": "没有名为「{name}」的档案",
|
|
531
|
+
"modelprof.error.lastProfile": "最后一个档案不可删除",
|
|
532
|
+
"modelprof.error.pinEmpty": "文件中没有档案名",
|
|
533
|
+
"modelprof.error.pinOverwrite": "拒绝覆盖 {file}——文件为手工编辑(本次切换仅即时生效)",
|
|
534
|
+
"modelprof.error.pinRemove": "拒绝删除 {file}——文件为手工编辑(请自行删除)",
|
|
535
|
+
"modelprof.route.notSet": "(未设置)",
|
|
536
|
+
"modelprof.route.plain": "{provider}/{model}",
|
|
537
|
+
"modelprof.route.think": "{provider}/{model} · 思考 {effort}",
|
|
538
|
+
"modelprof.review.profile": "档案:{name}",
|
|
539
|
+
"modelprof.review.current": "当前",
|
|
540
|
+
"modelprof.review.defaultModel": "默认模型:{route}",
|
|
541
|
+
"modelprof.review.none": "代理:尚无记录——在 /profile-cfg 下选择模型,或按 s 保存当前配置",
|
|
542
|
+
"modelprof.review.agents": "代理({count} 个):",
|
|
543
|
+
"modelprof.review.notSaved": "(未保存——应用时不改动)",
|
|
544
|
+
"modelprof.review.inherit": "(继承)",
|
|
545
|
+
"modelprof.review.inheritWord": "继承",
|
|
546
|
+
"modelprof.review.think": "思考 {effort}",
|
|
547
|
+
"modelprof.review.fileMissing": "文件缺失",
|
|
548
|
+
"custprov.entry.name": "自定义提供方…",
|
|
549
|
+
"custprov.entry.hint": "base URL + API 密钥 + 模型——任意 OpenAI/Anthropic 兼容网关",
|
|
550
|
+
"custprov.hint.declared": "手工声明路由",
|
|
551
|
+
"custprov.step.title": "自定义提供方 {current}/{total} · {label}",
|
|
552
|
+
"custprov.step.id": "提供方 id",
|
|
553
|
+
"custprov.step.idHint": "settings.yaml 的路由键——同时派生凭据引用(如 acme-gateway → ACME_GATEWAY_API_KEY)",
|
|
554
|
+
"custprov.step.displayName": "显示名(可选)",
|
|
555
|
+
"custprov.step.displayNameHint": "显示在 /model 与 Models 分类——留空则用路由 id",
|
|
556
|
+
"custprov.step.protocol": "API 协议",
|
|
557
|
+
"custprov.step.protocolHint": "{list} 之一——留空默认 {default}",
|
|
558
|
+
"custprov.step.baseUrl": "Base URL",
|
|
559
|
+
"custprov.step.baseUrlHint": "网关端点,如 https://gateway.internal.example/v1",
|
|
560
|
+
"custprov.step.models": "模型",
|
|
561
|
+
"custprov.step.modelsHint": "逗号分隔的线上模型 id,如 acme-large, acme-think",
|
|
562
|
+
"custprov.step.apiKey": "API 密钥",
|
|
563
|
+
"custprov.step.apiKeyHint": "存为派生的凭据引用——绝不写入 settings.yaml",
|
|
564
|
+
"custprov.error.idEmpty": "提供方 id 不能为空",
|
|
565
|
+
"custprov.error.idLength": "提供方 id 需为 2–40 个字符",
|
|
566
|
+
"custprov.error.idChars": "只能用小写字母、数字和中划线(不含点号、空格)",
|
|
567
|
+
"custprov.error.idTaken": "「{id}」已存在——请换一个路由 id",
|
|
568
|
+
"custprov.error.nameLength": "显示名不能超过 40 个字符",
|
|
569
|
+
"custprov.error.protocol": "协议必须是以下之一:{list}",
|
|
570
|
+
"custprov.error.baseUrlEmpty": "Base URL 不能为空",
|
|
571
|
+
"custprov.error.baseUrlFormat": "Base URL 必须以 http:// 或 https:// 开头,且不含空格",
|
|
572
|
+
"custprov.error.modelsEmpty": "至少列出一个模型 id(逗号分隔)",
|
|
573
|
+
"custprov.error.modelLength": "每个模型 id 不能超过 80 个字符",
|
|
574
|
+
"custprov.error.modelsMax": "初始列表最多 50 个模型",
|
|
575
|
+
"custprov.error.keyEmpty": "API 密钥不能为空",
|
|
576
|
+
"provcatalog.hint.apiKey": "API 密钥",
|
|
577
|
+
"provcatalog.hint.aws": "AWS 凭据或 bearer token",
|
|
578
|
+
"provcatalog.hint.copilot": "GitHub Copilot 令牌",
|
|
579
|
+
"provcatalog.hint.googleCloud": "Google Cloud 凭据",
|
|
580
|
+
"provcatalog.hint.huggingface": "Hugging Face 令牌",
|
|
581
|
+
"provcatalog.hint.apiKey.gateway": "API 密钥 · OpenAI 兼容网关",
|
|
582
|
+
"provcatalog.status.set": "API 密钥已设置",
|
|
583
|
+
"provcatalog.status.missing": "API 密钥缺失",
|
|
584
|
+
"provcatalog.status.notConfigured": "API 密钥未配置",
|
|
585
|
+
"login.title.logout": "● 登出",
|
|
586
|
+
"login.col.provider": "提供方",
|
|
587
|
+
"login.col.keyRef": "密钥引用",
|
|
588
|
+
"login.error.removeFailed": "移除 {name} 的已存密钥失败{cause}",
|
|
589
|
+
"login.error.removeIncomplete": "已移除 {name} 的已存密钥,但其提供方配置未能移除:{error}",
|
|
590
|
+
"footer.hint.default": "⌨ Enter: 发送 · Esc ×2: 停止 · Ctrl+C ×2: 退出 · Ctrl+D: 退出(空输入)· Ctrl+G: 子代理 · Ctrl+Shift+F: 搜索 · /preset: 切换 · ↑↓: 历史",
|
|
591
|
+
"footer.hint.send": "Enter: 发送",
|
|
592
|
+
"footer.hint.stop": "Esc ×2: 停止",
|
|
593
|
+
"footer.hint.quit": "Ctrl+C ×2: 退出",
|
|
594
|
+
"footer.hint.quitEmpty": "Ctrl+D: 退出(空输入)",
|
|
595
|
+
"footer.hint.subagents": "Ctrl+G: 子代理",
|
|
596
|
+
"footer.hint.search": "Ctrl+Shift+F: 搜索",
|
|
597
|
+
"footer.hint.preset": "/preset: 切换",
|
|
598
|
+
"footer.hint.history": "↑↓: 历史",
|
|
599
|
+
"footer.seg.msgs": "💬 {count} 条消息",
|
|
600
|
+
"footer.seg.tools": "🔧 {count} 个工具",
|
|
601
|
+
"panel.empty.models": "没有匹配的模型",
|
|
602
|
+
"panel.empty.settings": "没有匹配的设置",
|
|
603
|
+
"panel.filter.input": "过滤:{query}_",
|
|
604
|
+
"panel.filter.active": "过滤:{query}",
|
|
605
|
+
"panel.filter.hint": "过滤:{query} · Backspace 删除 · Esc 清除过滤",
|
|
606
|
+
"panel.footer.filtering": "Enter 应用 · Esc 清除过滤",
|
|
607
|
+
"panel.footer.navigate": "↑↓ 移动 · Enter 选择 · Esc 返回",
|
|
608
|
+
"panel.footer.search": "↑↓ 移动 · Enter 选择 · 输入以搜索 · Esc 返回",
|
|
609
|
+
"panel.footer.field": "↑↓ 字段 · Enter 编辑 · Esc 返回",
|
|
610
|
+
"panel.col.field": "字段",
|
|
611
|
+
"panel.col.value": "值",
|
|
612
|
+
"panel.col.setting": "设置",
|
|
613
|
+
"panel.viewer.more": "… 还有 {count} 行",
|
|
614
|
+
"panel.viewer.close": "Esc 关闭",
|
|
615
|
+
"startup.plugin.disabled": "{label}(已禁用)",
|
|
616
|
+
"startup.tree.base": "└─ dsh-base({count})",
|
|
617
|
+
"startup.summary": "mcp {mcp} · 技能 {installed}/{total} · 插件 {plugins}",
|
|
618
|
+
"hotkeys.title": "⚙ 快捷键",
|
|
619
|
+
"hotkeys.updated": "快捷键已更新。",
|
|
620
|
+
"hotkeys.openFailed": "✘ 无法打开快捷键视图:{message}",
|
|
621
|
+
"hotkeys.footer": "↑↓ 选择 · Enter 修改 · Esc 关闭",
|
|
622
|
+
"hotkeys.action.escape": "停止当前任务 — 需按两次(第一次待命,500ms 内第二次触发)",
|
|
623
|
+
"hotkeys.action.ctrlC": "运行中:取消本轮 · 空闲:清空编辑器 · 再按一次退出",
|
|
624
|
+
"hotkeys.action.ctrlD": "退出 — 仅在编辑器为空时生效",
|
|
625
|
+
"hotkeys.action.modelPicker": "打开模型 / 思考选择器",
|
|
626
|
+
"hotkeys.action.subagentViewer": "打开子代理选择器 / 查看器",
|
|
627
|
+
"hotkeys.action.queuePanel": "打开待发送消息队列(d 删除 · s 立即 steer)",
|
|
628
|
+
"hotkeys.custom.many": "自定义:{path}({count} 项覆盖)",
|
|
629
|
+
"hotkeys.custom.one": "自定义:{path}(1 项覆盖)",
|
|
630
|
+
"hotkeys.custom.missing": "自定义:{path}(未找到 — 使用默认值)",
|
|
631
|
+
"hotkeys.formatHint": "格式:ctrl/shift/alt/super+键 · Enter 编辑 · 留空恢复默认",
|
|
632
|
+
"hotkeys.editorHint": "编辑器:pi-tui 默认 — 方向键 · Ctrl+B/F · Alt+←→ 按词移动 · Home/End · Ctrl+W/U/K 删除 · Ctrl+- 撤销",
|
|
633
|
+
"hotkeys.warn.invalidJson": "{label}:无效 JSON — {error}",
|
|
634
|
+
"hotkeys.warn.notObject": "{label}:应为「应用快捷键 → 键 id」的 JSON 对象",
|
|
635
|
+
"hotkeys.warn.invalidKey": "{label}:「{field}」= {value} 不是有效的键 id — 保留默认值",
|
|
636
|
+
"hotkeys.warn.unknownField": "{label}:未知字段「{field}」— 已忽略",
|
|
637
|
+
"hotkeys.file.notObject": "{label}:应为 JSON 对象 — 请修复或删除该文件后重试",
|
|
638
|
+
"hotkeys.file.parseError": "{label}:{error} — 请修复或删除该文件后重试",
|
|
639
|
+
"hotkeys.file.writeError": "{label}:无法写入 — {error}",
|
|
640
|
+
"hotkeys.parse.notKeyId": "不是有效的键 id — ctrl/shift/alt/super + 键(如 ctrl+x、f5、escape)",
|
|
641
|
+
"hotkeys.edit.title": "{field} 的按键 — 默认 {defaultValue}",
|
|
642
|
+
"hotkeys.edit.titleCustom": "{field} 的按键 — 默认 {defaultValue} · 当前 {custom}",
|
|
643
|
+
"hotkeys.edit.subtitle": "ctrl/shift/alt/super + 键 · 留空恢复默认",
|
|
644
|
+
"hotkeys.status.reset": "{field} → 默认({defaultValue})— 已生效",
|
|
645
|
+
"hotkeys.status.set": "{field} → {id} — 已生效"
|
|
646
|
+
}
|