scream-code 0.9.7 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2285 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath as __cjsShimFileURLToPath } from 'node:url';
3
+ import { dirname as __cjsShimDirname } from 'node:path';
4
+ const __filename = __cjsShimFileURLToPath(import.meta.url);
5
+ const __dirname = __cjsShimDirname(__filename);
6
+ import { randomUUID } from "node:crypto";
7
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { arch, hostname, release, type } from "node:os";
10
+ import { execFileSync } from "node:child_process";
11
+ import chalk from "chalk";
12
+ import { Container, Input, Key, matchesKey, truncateToWidth, visibleWidth } from "@liutod-scream/pi-tui";
13
+ //#region ../../packages/config/dist/index.mjs
14
+ /**
15
+ * Scream host and device identity header factories.
16
+ *
17
+ * The caller owns the host identity (product name + host app version)
18
+ * and the `homeDir` where the stable device id is stored. This module
19
+ * intentionally keeps no global CLI version or environment-derived
20
+ * production state.
21
+ */
22
+ const SCREAM_CODE_PLATFORM = "scream_code_cli";
23
+ function createScreamDeviceId(homeDir, _options = {}) {
24
+ const deviceIdPath = join(homeDir, "device_id");
25
+ if (existsSync(deviceIdPath)) try {
26
+ const text = readFileSync(deviceIdPath, "utf-8").trim();
27
+ if (text.length > 0) return text;
28
+ } catch {}
29
+ const id = randomUUID();
30
+ try {
31
+ mkdirSync(homeDir, {
32
+ recursive: true,
33
+ mode: 448
34
+ });
35
+ writeFileSync(deviceIdPath, id, {
36
+ encoding: "utf-8",
37
+ mode: 384
38
+ });
39
+ } catch {}
40
+ return id;
41
+ }
42
+ function createScreamDeviceHeaders(options) {
43
+ return {
44
+ "X-Msh-Platform": SCREAM_CODE_PLATFORM,
45
+ "X-Msh-Version": requiredAsciiHeader(options.version, "Scream identity version"),
46
+ "X-Msh-Device-Name": asciiHeader(hostname()),
47
+ "X-Msh-Device-Model": asciiHeader(deviceModel()),
48
+ "X-Msh-Os-Version": asciiHeader(release()),
49
+ "X-Msh-Device-Id": createScreamDeviceId(options.homeDir)
50
+ };
51
+ }
52
+ function createScreamUserAgent(options) {
53
+ const product = requiredAsciiHeader(options.userAgentProduct, "Scream identity product");
54
+ const version = requiredAsciiHeader(options.version, "Scream identity version");
55
+ const suffix = options.userAgentSuffix === void 0 ? void 0 : asciiHeader(options.userAgentSuffix, "");
56
+ return suffix === void 0 || suffix.length === 0 ? `${product}/${version}` : `${product}/${version} (${suffix})`;
57
+ }
58
+ function createScreamDefaultHeaders(options) {
59
+ return {
60
+ "User-Agent": createScreamUserAgent(options),
61
+ ...createScreamDeviceHeaders({
62
+ homeDir: options.homeDir,
63
+ version: options.version
64
+ })
65
+ };
66
+ }
67
+ function assertScreamHostIdentity(identity) {
68
+ if (identity === void 0) throw new Error("Scream host identity is required. Pass the host product name and version.");
69
+ requiredAsciiHeader(identity.userAgentProduct, "Scream identity product");
70
+ requiredAsciiHeader(identity.version, "Scream identity version");
71
+ return identity;
72
+ }
73
+ function deviceModel() {
74
+ const os = type();
75
+ const version = release();
76
+ const osArch = arch();
77
+ if (os === "Darwin") return `macOS ${macOsProductVersion() ?? version} ${osArch}`;
78
+ if (os === "Windows_NT") return `Windows ${version} ${osArch}`;
79
+ return `${os} ${version} ${osArch}`.trim();
80
+ }
81
+ function macOsProductVersion() {
82
+ try {
83
+ const version = execFileSync("/usr/bin/sw_vers", ["-productVersion"], {
84
+ encoding: "utf-8",
85
+ timeout: 1e3
86
+ }).trim();
87
+ return version.length > 0 ? version : void 0;
88
+ } catch {
89
+ return;
90
+ }
91
+ }
92
+ function asciiHeader(value, fallback = "unknown") {
93
+ const cleaned = value.replaceAll(/[^ -~]/g, "").trim();
94
+ return cleaned.length > 0 ? cleaned : fallback;
95
+ }
96
+ function requiredAsciiHeader(value, fieldName) {
97
+ const cleaned = asciiHeader(value, "");
98
+ if (cleaned.length === 0) throw new Error(`${fieldName} must be a non-empty ASCII string.`);
99
+ return cleaned;
100
+ }
101
+ const dictionaries = {
102
+ zh: {
103
+ "status.not_set": "未设置",
104
+ "status.none": "无",
105
+ "status.model_name": "模型名称",
106
+ "status.work_dir": "工作目录",
107
+ "status.permission_mode": "权限模式",
108
+ "status.plan_mode": "计划模式",
109
+ "status.session_id": "会话编号",
110
+ "status.session_title": "会话标题",
111
+ "status.status_warning": "状态警告",
112
+ "status.context_window": "上下文窗口",
113
+ "status.no_context_data": "暂无上下文窗口数据。",
114
+ "tasks.no_session": "没有活动会话。",
115
+ "tasks.load_failed": "加载任务失败:{msg}",
116
+ "tasks.refresh_output_failed": "输出刷新失败:{msg}",
117
+ "tasks.refresh_failed": "刷新失败:{msg}",
118
+ "tasks.already_stopped": "{name} 已是终止状态 — 无需停止。",
119
+ "tasks.refreshing": "正在刷新…",
120
+ "tasks.stopping": "正在停止 {name}…",
121
+ "tasks.user_stopped": "用户发起停止",
122
+ "tasks.stop_failed": "停止失败:{msg}",
123
+ "tasks.open_output_failed": "无法打开输出:{msg}",
124
+ "status.idle": "○ 空闲",
125
+ "status.thinking": "思考中",
126
+ "status.composing": "输出中",
127
+ "status.tool": "执行中",
128
+ "status.waiting": "等待响应",
129
+ "approval.allow_once": "批准一次",
130
+ "approval.allow_session": "批准(当前会话)",
131
+ "approval.deny": "拒绝",
132
+ "approval.deny_feedback": "拒绝并反馈",
133
+ "approval.revise": "修订",
134
+ "approval.approve": "批准",
135
+ "approval.edit": "编辑 ",
136
+ "approval.file": "文件",
137
+ "approval.stop_task": "停止任务:",
138
+ "approval.start": "启动 ",
139
+ "approval.agent": "智能体",
140
+ "approval.invoke_skill": "调用技能 ",
141
+ "approval.fetch": "获取 ",
142
+ "approval.search": "搜索:",
143
+ "approval.todo_update": "更新待办列表({count} 项)",
144
+ "approval.background": "后台",
145
+ "approval.danger.recursive_delete": "递归删除",
146
+ "approval.danger.pipe_to_shell": "管道到 shell",
147
+ "approval.danger.dd_write": "dd 写入",
148
+ "approval.danger.raw_device": "写入原始设备",
149
+ "approval.danger.fork_bomb": "fork 炸弹",
150
+ "approval.stop_task_prefix": "停止任务 ",
151
+ "approval.header.command": "是否执行此命令?",
152
+ "approval.header.file_write": "是否写入此文件?",
153
+ "approval.header.file_edit": "是否应用这些编辑?",
154
+ "approval.header.stop_task": "是否停止此任务?",
155
+ "approval.header.plan": "是否按此计划构建?",
156
+ "approval.header.generic": "是否批准 {name}?",
157
+ "approval.feedback_hint": "输入反馈 · ↵ 提交。",
158
+ "common.cancel": "取消",
159
+ "common.confirm": "确认",
160
+ "common.submit": "提交",
161
+ "common.back": "返回",
162
+ "common.close": "关闭",
163
+ "common.delete": "删除",
164
+ "common.install": "安装",
165
+ "common.uninstall": "卸载",
166
+ "common.restart": "重启",
167
+ "common.start": "启动",
168
+ "common.stop": "关闭",
169
+ "common.off": "关闭",
170
+ "common.on": "开启",
171
+ "common.done": "完成",
172
+ "common.fail": "失败",
173
+ "common.running": "运行中",
174
+ "common.not_set": "未设置",
175
+ "error.path_empty": "路径不能为空",
176
+ "error.path_not_exist": "路径不存在: {path}",
177
+ "error.unsupported_format": "仅支持 .md、.markdown、.txt 文件",
178
+ "error.image_not_supported": "当前模型不支持图片输入。",
179
+ "error.video_not_supported": "当前模型不支持视频输入。",
180
+ "error.network_timeout": "网络超时,建议检查网络或开启加速后重试。",
181
+ "error.load_failed": "加载失败: {msg}",
182
+ "error.internal": "内部错误",
183
+ "error.no_session": "没有活跃的会话。",
184
+ "footer.shift_tab": "shift+tab: 计划模式",
185
+ "footer.model": "/model: 切换模型",
186
+ "footer.ctrl_s": "ctrl+s: 中途干预",
187
+ "footer.compact": "/compact: 压缩上下文",
188
+ "footer.ctrl_o": "ctrl+o: 展开工具输出",
189
+ "footer.tasks": "/tasks: 后台任务",
190
+ "footer.shift_enter": "shift+enter: 换行",
191
+ "footer.init": "/init: 生成 AGENTS.md",
192
+ "footer.at": "@: 提及文件",
193
+ "footer.ctrl_c": "ctrl+c: 取消",
194
+ "footer.skill": "/skill: 打开 Skill 中心",
195
+ "footer.help": "/help: 显示命令",
196
+ "footer.config": "/config: 选择并配置你常用的模型商",
197
+ "footer.reminder": "让 Scream 安排任务,例如 \"2个小时后提醒我去拿快递\"",
198
+ "footer.context": "上下文:{pct} ({tokens}/{maxTokens})",
199
+ "footer.context_short": "上下文:{pct}",
200
+ "footer.tasks_running": "{count}个任务 运行中",
201
+ "footer.agents_running": "{count}个代理 运行中",
202
+ "lifecycle.memory_countdown": "15 分钟未操作,即将整理会话记忆",
203
+ "lifecycle.memory_cancel_hint": "按 Ctrl+W 取消({seconds} 秒后自动开始)",
204
+ "lifecycle.memory_cancelled": "已取消记忆提取",
205
+ "lifecycle.memory_processing": "正在整理会话记忆...",
206
+ "lifecycle.memory_done": "已沉淀 {count} 条记忆至备忘录",
207
+ "lifecycle.memory_none": "本次无需沉淀新记忆",
208
+ "lifecycle.memory_failed": "记忆整理失败,稍后再试",
209
+ "input.replay_blocked": "会话历史正在回放时无法发送输入。",
210
+ "input.send_failed": "发送失败:{message}",
211
+ "input.guide_failed": "引导失败:{message}",
212
+ "welcome.config": "/config 配置模型",
213
+ "welcome.sessions": "/sessions 恢复历史会话",
214
+ "welcome.quick_menu": "/ 输入后打开快捷菜单",
215
+ "welcome.just_now": "刚刚",
216
+ "welcome.minutes_ago": "{minutes}分钟前",
217
+ "welcome.hours_ago": "{hours}小时前",
218
+ "welcome.days_ago": "{days}天前",
219
+ "welcome.no_recent": "无最近会话",
220
+ "welcome.recent": "最近会话",
221
+ "welcome.like_active": "like已激活",
222
+ "welcome.like_inactive": "like未加载",
223
+ "welcome.help_hint": "/help 查看帮助",
224
+ "loading.ai": "Ai正在加载中...",
225
+ "loading.waking": "正在唤醒核心...",
226
+ "loading.press_enter": "按下 ENTER 唤醒核心",
227
+ "loading.quit_hint": "按住 Ctrl+C 即可退出 Scream Code",
228
+ "language.picker_title": "语言 / Language",
229
+ "language.picker_hint": "↑↓ 选择 · Enter 确认 · Esc 取消",
230
+ "language.unchanged": "语言未更改:\"{locale}\"。",
231
+ "language.save_failed": "保存语言设置失败:{error}",
232
+ "language.switched": "语言已切换为 {locale}",
233
+ "language.restart_hint": "建议重启 scream-code 以使所有界面文本生效",
234
+ "knowledge.chunking": "切分文件中...",
235
+ "knowledge.embedding_chunks": "嵌入 chunks: {index}/{total}",
236
+ "knowledge.extracting": "抽取事件: {index}/{total}",
237
+ "knowledge.embedding_events": "嵌入 events: {index}/{total}",
238
+ "knowledge.embedding_entities": "嵌入 entities...",
239
+ "knowledge.embedding_relations": "嵌入关系...",
240
+ "knowledge.error": "错误: {msg}",
241
+ "knowledge.ingest": "摄入文件/文件夹",
242
+ "knowledge.ingest_desc": "输入 markdown/txt 文件或文件夹路径【摄入后首次抽取事件关联需要调用llm,文件过大建议更换性价比模型】",
243
+ "knowledge.ingesting": "开始摄入...",
244
+ "knowledge.ingest_done": "摄入完成",
245
+ "knowledge.ingest_fail": "摄入失败",
246
+ "knowledge.batch_done": "批量摄入完成",
247
+ "knowledge.batch_partial": "批量摄入完成(部分失败)",
248
+ "knowledge.succeeded": "成功: {count} 个文件",
249
+ "knowledge.failed": "失败: {count} 个文件",
250
+ "knowledge.failed_files": "失败文件:",
251
+ "knowledge.file_label": "文件",
252
+ "knowledge.docs_title": "知识库文档",
253
+ "knowledge.empty": "知识库为空,请先用 /knowledge 摄入文档",
254
+ "knowledge.search": "搜索测试",
255
+ "knowledge.search_desc": "输入查询,测试多跳检索",
256
+ "knowledge.search_placeholder": "例如:A 公司的竞争对手是谁",
257
+ "knowledge.searching": "搜索中...",
258
+ "knowledge.search_done": "搜索完成",
259
+ "knowledge.search_fail": "搜索失败",
260
+ "knowledge.search_result": "搜索结果",
261
+ "knowledge.no_hits": "查询 \"{query}\" 未命中任何 chunk",
262
+ "knowledge.vector_degraded": "向量模型未就绪,当前为关键词检索模式。如下载失败,建议开启科学上网后重启。",
263
+ "knowledge.query_label": "查询",
264
+ "knowledge.no_title": "(无标题)",
265
+ "knowledge.source_label": "来源",
266
+ "knowledge.delete": "删除文档",
267
+ "knowledge.delete_desc": "从知识库删除一个文档(级联删除关联数据)",
268
+ "knowledge.delete_pick": "选择要删除的文档",
269
+ "knowledge.cascade_warning": "删除后无法恢复,关联的 chunks/events/entities 会级联删除(Esc 取消)",
270
+ "knowledge.cascade_delete": "级联删除",
271
+ "knowledge.confirm_delete": "确认删除",
272
+ "knowledge.confirm_delete_name": "确认删除「{name}」?",
273
+ "knowledge.no_delete_data": "返回,不删除任何数据",
274
+ "knowledge.no_delete": "没有可删除的文档",
275
+ "knowledge.delete_fail_not_found": "删除失败:文档不存在",
276
+ "knowledge.deleted": "已删除",
277
+ "knowledge.doc_removed": "文档已从知识库移除",
278
+ "knowledge.cancelled": "已取消",
279
+ "knowledge.no_delete_doc": "未删除任何文档",
280
+ "knowledge.stats": "知识库统计",
281
+ "knowledge.stats_desc": "查看知识库整体统计",
282
+ "knowledge.stats_note": "说明",
283
+ "knowledge.stats_sources": "摄入的文件/来源数",
284
+ "knowledge.stats_documents": "文档元数据记录数",
285
+ "knowledge.stats_chunks": "切片数(按标题切分)",
286
+ "knowledge.stats_events": "LLM 抽取的融合事件数",
287
+ "knowledge.stats_entities": "去重后的实体数",
288
+ "knowledge.ingest_full": "从 markdown/txt 文件或文件夹摄入知识(chunk + 抽事件 + 抽实体)",
289
+ "knowledge.doc_list": "文档列表",
290
+ "knowledge.doc_list_desc": "查看所有已摄入的文档",
291
+ "knowledge.search_effect": "输入查询,测试多跳检索效果",
292
+ "knowledge.web": "知识图谱",
293
+ "knowledge.web_desc": "在浏览器中查看交互式知识图谱",
294
+ "knowledge.download_model": "下载向量模型",
295
+ "knowledge.download_model_desc": "手动下载 bge-small-zh-v1.5 模型(约 95 MB)以启用语义搜索",
296
+ "knowledge.download_model_installed": "(已安装)",
297
+ "knowledge.download_model_retry_hint": "可返回菜单重新选择「下载向量模型」重试,建议科学上网",
298
+ "knowledge.menu_title": "SAG知识库管理",
299
+ "knowledge.menu_hint": "选择操作(esc 退出)",
300
+ "knowledge.op_failed": "操作失败: {msg}",
301
+ "init.select_title": "选择 AGENTS.md 生成位置",
302
+ "init.select_hint": "当前目录:{currentDir} · 项目根目录:{projectRoot}",
303
+ "init.current_dir": "当前目录",
304
+ "init.current_dir_desc": "仅在当前目录生成并分析",
305
+ "init.project_root": "项目根目录",
306
+ "init.project_root_desc": "基于当前目录,允许 AI 自行向上探索后生成",
307
+ "init.cancelled": "已取消初始化",
308
+ "goal.need_desc": "请提供目标描述,例如 /goal 实现登录功能",
309
+ "goal.no_active": "当前没有激活的目标。",
310
+ "goal.no_resumable": "没有可恢复的目标。使用 /goal <指令> 设置新目标。",
311
+ "goal.set": "🎯 目标已设置:{objective}",
312
+ "goal.paused": "🎯 目标已暂停。使用 /goal resume 恢复。",
313
+ "goal.resumed": "🎯 目标已恢复。",
314
+ "goal.cancelled": "🎯 目标已取消。",
315
+ "goal.conflict_loop": "已有激活的目标,请先使用 /goaloff 取消当前目标。",
316
+ "goal.create_failed": "创建目标失败:{msg}",
317
+ "goal.pause_failed": "暂停目标失败:{msg}",
318
+ "goal.resume_failed": "恢复目标失败:{msg}",
319
+ "goal.cancel_failed": "取消目标失败:{msg}",
320
+ "goal.status_failed": "获取目标状态失败:{msg}",
321
+ "goal.resume_hint": "继续执行当前目标。",
322
+ "goal.wizard_title": "目标:{objective}",
323
+ "goal.budget_turns_hint": "轮次限制(0 = 不限制)",
324
+ "goal.budget_tokens_hint": "Token 限制(0 = 不限制)",
325
+ "goal.budget_time_hint": "时间限制,单位分钟(0 = 不限制)",
326
+ "update.timeout": "超时,可能因网络原因卡住。",
327
+ "update.network_hint": "请检查网络后重试(国内用户建议科学上网)。",
328
+ "update.network_error": "失败:网络连接异常,请检查网络后重试。",
329
+ "update.network_hint_retry": "(国内用户建议科学上网,如遇网络错误请多尝试几次)",
330
+ "update.failed": "失败:{msg}",
331
+ "update.signal": "信号",
332
+ "update.exit_code": "退出码",
333
+ "update.idle_only": "请在空闲时执行更新。",
334
+ "update.checking": "正在检测更新...",
335
+ "update.already_latest": "当前已是最新版本({version})",
336
+ "update.updating": "正在更新到 {version}...",
337
+ "update.npm_install": "正在通过 npm 安装最新版本...",
338
+ "update.install_label": "安装 scream-code",
339
+ "update.done": "更新完成。请重启 Scream Code 以使用新版本。",
340
+ "mcp.connecting": "⏳ 连接中",
341
+ "mcp.connected": "🔌 已连接",
342
+ "mcp.failed": "❌ 失败",
343
+ "mcp.disabled": "⏸ 已停用",
344
+ "mcp.auth_required": "🔐 需授权",
345
+ "mcp.load_failed": "加载 MCP 服务器失败:{msg}",
346
+ "mcp.install_success": "{name} 安装成功并已启动。",
347
+ "mcp.install_fail": "{name} 安装失败。",
348
+ "mcp.uninstall_confirm": "确认卸载 \"{name}\"?",
349
+ "mcp.already_installed": "{name} 已安装,无需重复安装。",
350
+ "mcp.disabled_done": "{name} 已停用。",
351
+ "mcp.uninstalled": "{name} 已卸载。",
352
+ "mcp.no_session": "请先创建或恢复一个会话。",
353
+ "mcp.manage_title": "MCP 管理({count} 已连接)",
354
+ "mcp.no_installed": "暂无已安装的 MCP 服务器",
355
+ "mcp.recommended": "推荐 MCP(Enter 安装)",
356
+ "mcp.installed": "已安装",
357
+ "mcp.install_enter": "Enter 安装",
358
+ "mcp.confirm_uninstall": "确认卸载",
359
+ "mcp.uninstall_yes": "是,卸载",
360
+ "mcp.installing": "正在安装",
361
+ "mcp.configuring": "正在配置",
362
+ "mcp.network_timeout": "网络超时,建议检查网络或开启加速后重试。",
363
+ "mcp.install_failed": "安装失败:{msg}",
364
+ "mcp.disable_failed": "停用失败: {msg}",
365
+ "mcp.detected_starting": "已检测到安装,正在启动...",
366
+ "mcp.start_failed": "启动失败: {msg}",
367
+ "mcp.uninstall_done": "已卸载。",
368
+ "mcp.uninstall_failed": "卸载失败: {msg}",
369
+ "mcp.footer_hint": "Enter 安装/启停 d 卸载 Esc 返回",
370
+ "mcp.macos_only": "仅支持 macOS",
371
+ "cc.start": "启动",
372
+ "cc.stop": "关闭",
373
+ "cc.restart": "重启",
374
+ "cc.uninstall": "卸载",
375
+ "cc.start_desc": "启动 cc-connect 后台守护进程",
376
+ "cc.stop_desc": "停止 cc-connect 后台守护进程",
377
+ "cc.restart_desc": "重启 cc-connect 后台守护进程",
378
+ "cc.uninstall_desc": "彻底卸载 cc-connect(守护进程 + 配置 + npm 包)",
379
+ "cc.manage_title": "cc-connect 守护进程管理",
380
+ "cc.operating": "正在{label}cc-connect...",
381
+ "cc.started": "cc-connect 已{label}",
382
+ "cc.start_failed": "{label}失败:{output}",
383
+ "cc.will_clean": "将执行以下清理:",
384
+ "cc.clean_daemon": "· 停止并卸载 {label} 守护进程",
385
+ "cc.clean_config": "· 删除配置目录{detail}",
386
+ "cc.current_version": "· 当前版本:{version}",
387
+ "cc.install_path": "· 安装路径:{path}",
388
+ "cc.clean_pm2": "· 删除 pm2 进程 + 启动项(startup.bat / schtasks)",
389
+ "cc.clean_residual": "· 清理 {count} 个残留文件(launchd/systemd/pm2 日志)",
390
+ "cc.not_detected": "未识别 cc-connect 安装",
391
+ "cc.not_detected_desc": "未在默认 npm 全局路径下检测到 cc-connect 安装,已中止卸载。建议将此情况发送给 scream,由其指导手动清理。",
392
+ "cc.uninstalling": "正在卸载 cc-connect…",
393
+ "cc.stop_daemon": "停止守护进程",
394
+ "cc.delete_label": "删除",
395
+ "cc.clean_files": "清理残留文件",
396
+ "cc.uninstall_done": "cc-connect 已彻底卸载",
397
+ "cc.uninstall_partial": "部分步骤失败,详见下方提示",
398
+ "cc.uninstalled": "cc-connect 已卸载",
399
+ "cc.restart_hint": "建议重启 Scream Code 以确保 cc-connect 状态完全清空。",
400
+ "cc.uninstall_partial_label": "卸载部分失败",
401
+ "cc.residual": "残留",
402
+ "cc.confirm_uninstall": "确认彻底卸载 cc-connect?",
403
+ "cc.uninstall_irreversible": "此操作不可撤销,所有 cc-connect 数据将被清除",
404
+ "cc.confirm_uninstall_btn": "确认卸载",
405
+ "auth.fetching_models": "正在拉取最新模型目录...",
406
+ "auth.no_providers": "没有已配置的模型商。",
407
+ "auth.deleted": "已删除模型商: {name}",
408
+ "auth.input_api_url": "输入服务商 API 地址",
409
+ "auth.api_url_hint": "例如 https://api.deepseek.com(可粘贴)",
410
+ "auth.input_api_key": "输入 API Key",
411
+ "auth.api_key_hint": "密钥保存到 ~/.scream/config.toml(可粘贴,Esc 取消)",
412
+ "auth.input_model": "输入模型型号",
413
+ "auth.model_hint": "例如 deepseek-v4-flash",
414
+ "auth.input_context": "输入模型最大上下文长度 (tokens)",
415
+ "auth.context_hint": "默认 131072,DeepSeek V4 填 1000000",
416
+ "auth.connected": "已连接: {name}",
417
+ "like.priority": "用户通过 /like 设置的偏好具有最高优先级,每次回复都必须遵守。",
418
+ "like.nickname": "设置昵称",
419
+ "like.nickname_hint": "你希望我怎么称呼你?留空表示不设置。",
420
+ "like.nickname_example": "例如:Alex",
421
+ "like.tone": "设置回应语气",
422
+ "like.tone_hint": "例如:友好、专业、幽默、简洁等(留空表示不设置)",
423
+ "like.tone_example": "例如:友好而专业",
424
+ "like.other": "其他偏好",
425
+ "like.other_hint": "例如:多说例子、先给结论再展开、避免术语等(留空表示不设置)",
426
+ "like.other_example": "例如:请用中文回答,避免缩写",
427
+ "like.cancelled": "已取消 /like 设置",
428
+ "like.saved": "偏好已保存(下次新会话生效)",
429
+ "revoke.streaming": "无法在 streaming 中撤回 — 请先按 Esc 或 Ctrl-C 取消。",
430
+ "revoke.usage": "用法:/revoke [数量],数量为正整数。",
431
+ "revoke.nothing": "没有可以撤回的内容。",
432
+ "revoke.failed": "撤回失败:{msg}",
433
+ "btw.usage": "/btw 用法",
434
+ "btw.desc": "在不中断当前对话的情况下快速提问。",
435
+ "btw.example1": "示例:/btw 这个项目有多少个包?",
436
+ "btw.example2": "示例:/btw useEffect 的 cleanup 什么时候执行?",
437
+ "btw.no_session": "请先创建或恢复一个会话,再使用 /btw。",
438
+ "session.exporting_md": "正在导出会话为 Markdown…",
439
+ "session.no_messages": "没有消息可导出。",
440
+ "session.exporting": "正在导出会话…",
441
+ "memory.inject_prefix": "[用户从记忆备忘录中注入了以下历史记录]",
442
+ "memory.history_title": "历史备忘录",
443
+ "memory.requirement": "用户需求",
444
+ "memory.plan": "执行方案",
445
+ "memory.plan_none": "(无)",
446
+ "memory.result": "完成结果",
447
+ "memory.pitfall": "踩坑记录",
448
+ "memory.pitfall_none": "无",
449
+ "memory.experience": "成功经验",
450
+ "memory.experience_none": "无",
451
+ "memory.source_session": "来源会话",
452
+ "memory.record_time": "记录时间",
453
+ "memory.inject_hint": "请参考以上历史经验来处理当前问题。特别注意踩坑记录中的错误不要重犯。",
454
+ "makeskill.wait": "请等待当前回复完成后再使用 /make-skill",
455
+ "dialog.nav": "↑↓ 导航",
456
+ "dialog.page": "←→ 翻页",
457
+ "dialog.select": "Enter 选择",
458
+ "dialog.cancel": "Esc 取消",
459
+ "dialog.search_placeholder": "(输入搜索)",
460
+ "title.dialog_title": "会话标题",
461
+ "title.placeholder": "输入新的会话标题…",
462
+ "session.title": "会话",
463
+ "session.loading": "正在加载会话...",
464
+ "session_picker.empty": "未找到会话。按 Escape 关闭。",
465
+ "session_picker.cc_restricted": "CC专属会话不支持切换或删除,请点击或复制下方文件路径进入手动管理",
466
+ "session.picker_title": "会话 ",
467
+ "session.delete_confirm": "⚠️ 按 Enter 确认删除,Esc 取消",
468
+ "session.picker_hint": "(↑↓ 导航,Enter 选择,d 删除,Esc 取消)",
469
+ "model.nav_model": "↑↓ 模型",
470
+ "model.nav_thinking": "←→ 思考等级",
471
+ "model.nav_page": "PgUp/PgDn 翻页",
472
+ "model.nav_select": "Enter 切换模型",
473
+ "model.nav_cancel": "Esc 取消",
474
+ "model.search_placeholder": "(输入搜索)",
475
+ "model.select_title": " 选择模型",
476
+ "model.search_label": " 搜索:",
477
+ "model.thinking_global": " Thinking(全局设置)",
478
+ "model.multimodal": " 多模态能力",
479
+ "model.image": "识图",
480
+ "model.supported": "✓ 支持",
481
+ "model.not_supported": "✗ 不支持",
482
+ "model.video": "视频",
483
+ "model.audio": "音频",
484
+ "help.toggle_plan": "切换计划模式",
485
+ "help.toggle_output": "切换工具输出展开",
486
+ "help.interrupt": "中途干预 — 在流式传输中插入后续提示",
487
+ "help.newline": "插入换行",
488
+ "help.cancel_stream": "中断流 / 清空输入",
489
+ "help.exit": "退出(空输入时)",
490
+ "help.close_dialog": "关闭对话框 / 中断流",
491
+ "help.browse_history": "浏览输入历史",
492
+ "help.submit": "提交",
493
+ "help.title": " 帮助 ",
494
+ "help.close_hint": "Esc / Enter / q 关闭 · ↑↓ 滚动",
495
+ "help.welcome_msg": "Scream 已准备好帮助您!发送消息即可开始。",
496
+ "help.hidden_commands": "/config diy 自定义模型服务商 /model diy 多代理编排配置",
497
+ "help.shortcuts": "键盘快捷键",
498
+ "help.slash_commands": "斜杠命令",
499
+ "help.showing_range": "显示 {start}-{end} / {total}",
500
+ "question.other": "其他",
501
+ "question.unanswered": "未回答",
502
+ "question.check_before_submit": "提交前检查您的答案",
503
+ "question.ready_to_submit": "准备好提交答案了吗?",
504
+ "question.partial_unanswered": "部分问题尚未回答。",
505
+ "question.submit": "提交",
506
+ "question.cancel": "取消",
507
+ "question.label": " 问题",
508
+ "question.input_hint": " 输入答案,然后按 Enter 保存。",
509
+ "question.more_lines": "更多行",
510
+ "question.showing_range": "显示 {start}-{end} / {total}",
511
+ "question.input_placeholder": "输入答案",
512
+ "question.save_hint": "↵ 保存",
513
+ "question.tab_switch": "tab 切换",
514
+ "question.esc_cancel": "esc 取消",
515
+ "question.arrow_select": "▲/▼ 选择",
516
+ "question.tab_arrow_switch": "←/→/tab 切换",
517
+ "question.enter_confirm": "↵ 确认",
518
+ "question.toggle": "切换",
519
+ "question.choose": "选择",
520
+ "memory.just_now": "刚刚",
521
+ "memory.minutes_ago": "{minutes} 分钟前",
522
+ "memory.hours_ago": "{hours} 小时前",
523
+ "memory.days_ago": "{days} 天前",
524
+ "memory.compaction_extract": "压缩提取",
525
+ "memory.manual_record": "手动记录",
526
+ "memory.exit_extract": "退出提取",
527
+ "memory.search_label": "搜索: ",
528
+ "memory.notebook_title": "记忆备忘录 ",
529
+ "memory.esc_clear_search": "(Esc 清除搜索)",
530
+ "memory.nav_hint": "(↑↓ 导航,Enter 查看,i 注入,d 删除,/ 搜索,Esc 关闭)",
531
+ "memory.loading": "正在加载...",
532
+ "memory.no_match": "未找到匹配 \"{query}\" 的记忆。",
533
+ "memory.empty": "暂无记忆备忘录。",
534
+ "memory.auto_extract_hint": " 压缩对话或退出会话时,系统会自动提取并保存。",
535
+ "memory.deleting": "删除: ",
536
+ "memory.delete_confirm_hint": " 按 Enter 确认删除,Esc 取消",
537
+ "memory.showing_range": "{start}-{end} / {total} 条",
538
+ "memory.id_label": "ID: ",
539
+ "memory.source_label": "来源: ",
540
+ "memory.project_label": "项目: ",
541
+ "memory.tags_label": "标签: ",
542
+ "memory.plan_label": "方案: ",
543
+ "memory.requirement_label": "需求: ",
544
+ "memory.result_label": "结果: ",
545
+ "memory.session_label": "会话: ",
546
+ "memory.pitfall_label": "踩坑: ",
547
+ "memory.experience_label": "经验: ",
548
+ "memory.detail_nav_hint": " Enter/Esc 返回 | i 注入 | d 删除",
549
+ "skill.no_session": "请先创建或恢复一个会话,再使用 Skill 中心。",
550
+ "skill.loading": "正在加载 Skill 中心…",
551
+ "skill.center_title": "Skill 中心",
552
+ "skill.no_skills": "当前没有已安装 Skill 也没有可安装 Skill 包。",
553
+ "skill.footer_hint": "Enter 激活/安装 · d 卸载 · i 安装并注入 · Esc 返回",
554
+ "skill.installed": "已安装的 Skill",
555
+ "skill.installable": "可安装的 Skill 包",
556
+ "skill.not_installed": "未安装",
557
+ "skill.no_session_activate": "未连接到会话。请先创建或恢复一个会话。",
558
+ "skill.not_found": "未找到 Skill",
559
+ "skill.installing_package": "正在安装 Skill 包…",
560
+ "skill.installed_injected": "已安装并注入当前会话。",
561
+ "skill.plugin_installed": "插件已安装",
562
+ "skill.no_manual_skill": "已成功安装,但该包没有可手动激活的 Skill。",
563
+ "skill.install_failed": "安装失败。",
564
+ "skill.install_failed_msg": "安装失败: {msg}",
565
+ "skill.select_activate": "选择一个 Skill 激活",
566
+ "skill.select_hint": "Enter 激活 · Esc 返回",
567
+ "skill.uninstall_whole_pkg": "将卸载整个包(共 {count} 个 Skill),无法只删除单个 Skill",
568
+ "skill.uninstall_single": "将卸载整个 Skill 包",
569
+ "skill.uninstalling": "正在卸载",
570
+ "skill.uninstalled": "已卸载。",
571
+ "skill.plugin_uninstalled": "插件已卸载",
572
+ "skill.plugin_removed": "该插件的 Skill 已从当前会话中移除,无需重启会话。",
573
+ "skill.uninstall_failed": "卸载失败。",
574
+ "skill.uninstall_failed_msg": "卸载失败: {msg}",
575
+ "skill.deleting_skill": "将删除该 Skill 的安装目录及子 Skill",
576
+ "skill.deleting": "正在删除",
577
+ "skill.deleted": "已删除。",
578
+ "skill.skill_deleted": "Skill 已删除",
579
+ "skill.skill_removed": "该 Skill 及其子 Skill 已从当前会话中移除。",
580
+ "skill.delete_failed": "删除失败。",
581
+ "skill.delete_failed_msg": "删除失败: {msg}",
582
+ "skill.confirm_uninstall": "确认卸载 \"{label}\"?",
583
+ "skill.uninstall_reversible": "卸载后可在 Skill 中心重新安装",
584
+ "skill.uninstall_yes": "是,卸载",
585
+ "toolcall.bg_agent_lost": "后台 agent 丢失(会话在完成前已重启)",
586
+ "toolcall.bg_agent_terminated": "后台 agent 已终止",
587
+ "toolcall.bg_agent_failed": "后台 agent 失败",
588
+ "toolcall.current_plan": "当前计划",
589
+ "toolcall.approved": "已批准:{chosen}",
590
+ "toolcall.approved_label": "已批准",
591
+ "toolcall.input_unavailable": "无法收集你的输入",
592
+ "toolcall.input_collected": "已收集你的答案",
593
+ "toolcall.waiting_input": "等待你的输入",
594
+ "toolcall.used": "已使用",
595
+ "toolcall.truncated": "已截断",
596
+ "toolcall.in_use": "正在使用",
597
+ "toolcall.sub_agent_named": "子 agent {name} ({id})",
598
+ "toolcall.sub_agent": "子 agent ({id})",
599
+ "toolcall.more_tools": "还有 {count} 个 tool call...",
600
+ "toolcall.agent_used": "{name} 已使用 {tool}",
601
+ "toolcall.agent_in_use": "{name} 正在使用 {tool}",
602
+ "toolcall.starting": "启动中…",
603
+ "toolcall.running": "运行中",
604
+ "toolcall.completed": "已完成",
605
+ "toolcall.tool_count": "{count} 个 tool",
606
+ "toolcall.failed": "失败",
607
+ "toolcall.bg_running": "后台运行",
608
+ "toolcall.truncation_notice": "Tool 调用参数因 max_tokens 被截断 — 调用未执行。",
609
+ "toolcall.lines_hidden": "...(还有 {hidden} 行,共 {total} 行,按 ctrl+o 展开)",
610
+ "toolcall.preparing_changes": "正在准备变更{path}...{bytes} · 已用 {elapsed}",
611
+ "toolcall.rejected": "已拒绝",
612
+ "toolcall.suggestion": "建议",
613
+ "toolcall.question_ignored": "用户忽略了该问题。",
614
+ "toolcall.question_label": "问",
615
+ "readgroup.reading": "正在读取 {count} 个文件…",
616
+ "readgroup.read": "已读取 {count} 个文件",
617
+ "readgroup.failed_suffix": " · 失败",
618
+ "readgroup.lines_suffix": " · {count} 行",
619
+ "readgroup.failed_count": " · {count} 失败",
620
+ "readgroup.reading_suffix": " · 读取中…",
621
+ "readgroup.conflict_suffix": "冲突",
622
+ "handler.oauth_page_opened": "已在浏览器中打开 {serverName} 的授权页面",
623
+ "handler.mcp_sync_failed": "同步 MCP 服务器状态失败: {message}",
624
+ "handler.max_tokens_truncated": "模型达到 max_tokens 限制 — 工具调用在运行前被截断。",
625
+ "handler.max_tokens_no_tool": "模型达到 max_tokens 限制 — 未发出工具调用。",
626
+ "handler.max_tokens_hint": "如果此限制对您的模型不合适,请在 scream-code 配置中为模型别名设置 `max_output_size`。",
627
+ "handler.user_interrupted": "用户中断",
628
+ "handler.max_steps_reached": "达到每轮步骤限制(max_steps)",
629
+ "handler.step_interrupted": "步骤中断 ({reason})",
630
+ "handler.warning_prefix": "警告: {message}",
631
+ "handler.mcp_server_failed": "MCP 服务器 \"{name}\" 失败{error}",
632
+ "handler.mcp_server_needs_auth": "MCP 服务器 \"{name}\" 需要 OAuth 认证,请运行 /mcp",
633
+ "handler.mcp_server_disabled": "MCP 服务器 \"{name}\" 已禁用",
634
+ "handler.mcp_server_connecting": "MCP 服务器 \"{name}\" 正在连接…",
635
+ "handler.skill_activated": "已激活技能: {skillName}",
636
+ "handler.storm_breaker_title": "Storm Breaker(风暴守护者)",
637
+ "handler.storm_breaker_detail": "检测到异常压缩节奏:{detail}可能存在工具调用循环或超长输出,建议查看最近几步的对话记录。",
638
+ "session.not_found": "未找到会话 \"{sessionId}\"。",
639
+ "session.wrong_dir": "会话 \"{sessionId}\" 是在其他目录下创建的。\n cd \"{workDir}\" && scream -r {sessionId}",
640
+ "session.no_resumable": "\"{workDir}\" 下没有可继续的会话;正在启动新会话。",
641
+ "session.init_failed": "启动会话未初始化。",
642
+ "session.already_in": "已在该会话中。",
643
+ "session.switch_streaming": "流式传输期间无法切换会话 — 请先按 Esc 或 Ctrl-C。",
644
+ "session.switch_replaying": "历史回放期间无法切换会话。",
645
+ "session.resume_failed": "恢复会话 {sessionId} 失败:{msg}",
646
+ "session.resumed": "已恢复会话 ({sessionId})。",
647
+ "session.replay_failed": "重放会话历史失败:{msg}",
648
+ "session.resume_warning": "警告:{warning}",
649
+ "session.new_replaying": "历史回放期间无法启动新会话。",
650
+ "session.new_failed": "启动新会话失败:{msg}",
651
+ "session.setup_failed": "创建后设置失败:{msg}",
652
+ "session.new_started": "已启动新会话 ({sessionId})。",
653
+ "replay.history_unavailable": "此会话的历史记录不可用。",
654
+ "replay.history_failed": "回放会话历史失败: {message}",
655
+ "replay.skill_activated": "已激活技能: {skillName}",
656
+ "replay.yes_mode_on": "YES 模式:开启",
657
+ "replay.yes_mode_on_detail": "所有操作将自动批准。请谨慎使用。",
658
+ "replay.yes_mode_off": "YES 模式:关闭",
659
+ "replay.permission_mode": "权限模式: {mode}",
660
+ "replay.approved_session": "已批准(当前会话)",
661
+ "replay.approved": "已批准",
662
+ "replay.rejected": "已拒绝",
663
+ "replay.cancelled": "已取消",
664
+ "replay.plan_revise": "计划已退回修订",
665
+ "replay.plan_rejected": "计划审查已拒绝",
666
+ "replay.plan_cancelled": "计划审查已取消",
667
+ "replay.feedback_prefix": "反馈: {feedback}",
668
+ "replay.bg_failed_suffix": " 在后台失败",
669
+ "replay.bg_lost_suffix": " 在后台丢失",
670
+ "replay.bg_stopped_suffix": " stopped",
671
+ "skill.source_label": "来源:",
672
+ "skill.plugin_label": "插件:",
673
+ "taskbrowser.running": "运行中",
674
+ "taskbrowser.awaiting": "等待中",
675
+ "taskbrowser.completed": "已完成",
676
+ "taskbrowser.interrupted": "已中断",
677
+ "taskbrowser.total": "总计",
678
+ "taskbrowser.stop": "停止",
679
+ "taskbrowser.confirm": "确认",
680
+ "taskbrowser.cancel": "取消",
681
+ "taskbrowser.select": "选择",
682
+ "taskbrowser.output": "输出",
683
+ "taskbrowser.stop_action": "停止",
684
+ "taskbrowser.refresh": "刷新",
685
+ "taskbrowser.filter": "筛选",
686
+ "taskbrowser.exit": "退出",
687
+ "taskbrowser.no_active": "无活跃任务。Tab = 显示全部。",
688
+ "taskbrowser.no_tasks": "本会话无后台任务。",
689
+ "taskbrowser.select_task": "从列表中选择一个任务。",
690
+ "taskbrowser.detail": "详情",
691
+ "taskbrowser.task_id": "任务 ID:",
692
+ "taskbrowser.status": "状态:",
693
+ "taskbrowser.description": "描述:",
694
+ "taskbrowser.command": "命令:",
695
+ "taskbrowser.running_time": "运行中",
696
+ "taskbrowser.completed_time": "已完成",
697
+ "taskbrowser.time": "时间:",
698
+ "taskbrowser.process_id": "进程 ID:",
699
+ "taskbrowser.exit_code": "退出码:",
700
+ "taskbrowser.stop_reason": "停止原因:",
701
+ "taskbrowser.timed_out": "已超时:",
702
+ "taskbrowser.yes": "是",
703
+ "taskbrowser.awaiting_label": "等待中:",
704
+ "subagent.desc_coder": "通用软件工程任务",
705
+ "subagent.desc_reviewer": "代码审查,发现 bug 和 API 契约违反",
706
+ "subagent.desc_writer": "内容生产与研究报告",
707
+ "subagent.desc_explore": "快速代码库探索(只读)",
708
+ "subagent.desc_oracle": "深度调试与架构决策",
709
+ "subagent.desc_plan": "实现规划与架构设计(只读)",
710
+ "subagent.desc_verify": "运行构建/测试/lint 验证改动",
711
+ "subagent.follow_main": "跟随主模型",
712
+ "subagent.follow_main_desc": "使用主代理当前模型(默认)",
713
+ "subagent.title": "子代理模型绑定",
714
+ "subagent.hint": "↑↓ 选择子代理 · Enter 绑定模型 · Esc 取消",
715
+ "subagent.bind_title": "绑定 {profile}",
716
+ "subagent.model_hint": "↑↓ 选择模型 · Enter 确认 · Esc 返回",
717
+ "subagent.save_failed": "保存失败:{msg}",
718
+ "kdoctree.no_title": "(无标题)",
719
+ "kdoctree.empty": "(空)",
720
+ "kdoctree.move": "移动",
721
+ "kdoctree.expand": "展开",
722
+ "kdoctree.collapse": "折叠",
723
+ "kdoctree.top_bottom": "顶/底",
724
+ "kdoctree.back": "返回",
725
+ "usage.no_token": "尚无 token 用量记录。",
726
+ "usage.input": "输入",
727
+ "usage.output": "输出",
728
+ "usage.total": "总计",
729
+ "usage.managed_title": "计划用量",
730
+ "usage.no_data": "暂无用量数据。",
731
+ "usage.used": "已用",
732
+ "usage.session_title": "会话用量",
733
+ "usage.context_window": "上下文窗口",
734
+ "usage.subagent_title": "子 Agent 用量",
735
+ "usage.panel_title": " 用量 ",
736
+ "agentgroup.n_agent_done": "{total} 个 {name} agent 已完成",
737
+ "agentgroup.n_agents_done": "{total} 个 agent 已完成",
738
+ "agentgroup.running_n_agents": "正在运行 {total} 个 agent",
739
+ "agentgroup.done": "已完成",
740
+ "agentgroup.failed": "失败",
741
+ "agentgroup.running": "运行中",
742
+ "agentgroup.running_n_agents_mixed": "正在运行 {total} 个 agent({parts})",
743
+ "agentgroup.no_desc": "(无描述)",
744
+ "agentgroup.error": "错误:",
745
+ "agentgroup.initializing": "初始化中…",
746
+ "agentgroup.check_done": "✓ 已完成",
747
+ "agentgroup.cross_failed": "✗ 失败",
748
+ "agentgroup.bg_running": "◐ 后台运行",
749
+ "mcppanel.connected": "已连接",
750
+ "mcppanel.pending": "等待中",
751
+ "mcppanel.needs_auth": "需认证",
752
+ "mcppanel.failed": "失败",
753
+ "mcppanel.disabled": "已禁用",
754
+ "mcppanel.tools_available": "{count} 个 tool 可用",
755
+ "mcppanel.servers": "服务器",
756
+ "mcppanel.no_config": "未配置 MCP 服务器。运行 /mcp 添加一个。",
757
+ "mcppanel.name": "名称",
758
+ "mcppanel.status": "状态",
759
+ "mcppanel.transport": "传输方式",
760
+ "mcppanel.tools": "工具",
761
+ "mcppanel.error": "错误:",
762
+ "mcppanel.action": "操作:",
763
+ "mcppanel.run_mcp": "运行 /mcp 管理服务器。",
764
+ "goalpanel.active": "▶ 运行中",
765
+ "goalpanel.complete": "✅ 已完成",
766
+ "goalpanel.blocked": "🚫 已阻塞",
767
+ "goalpanel.paused": "⏸ 已暂停",
768
+ "goalpanel.no_goal": "未开启任务",
769
+ "goalpanel.create_goal": "创建并启动目标",
770
+ "goalpanel.pause_goal": "暂停当前目标",
771
+ "goalpanel.resume_goal": "恢复已暂停的目标",
772
+ "goalpanel.cancel_goal": "取消当前目标",
773
+ "goalpanel.no_stop_condition": " No stop condition — runs until evaluated complete.",
774
+ "kresult.empty": "(空)",
775
+ "kresult.line": "行",
776
+ "kresult.page": "页",
777
+ "kresult.top_bottom": "顶/底",
778
+ "kresult.back": "返回",
779
+ "export.thinking": "思考",
780
+ "export.image": "[图片]",
781
+ "export.audio": "[音频]",
782
+ "export.video": "[视频]",
783
+ "export.tool_call": "#### 工具调用: {name}",
784
+ "export.tool_result": "工具结果: {name}",
785
+ "export.unknown": "未知",
786
+ "export.turn": "## 轮次 {number}",
787
+ "export.user": "### 用户",
788
+ "export.assistant": "### 助手",
789
+ "export.system": "### 系统",
790
+ "export.overview": "## 概览",
791
+ "export.topic": "- **主题**: {topic}",
792
+ "export.topic_empty": "- **主题**: (空)",
793
+ "export.conversation_stats": "- **对话**: {turns} 轮 | {toolCalls} 次工具调用",
794
+ "export.session_title": "# Scream 会话导出",
795
+ "bgtask.agent_task": "代理任务",
796
+ "bgtask.bash_task": "bash 任务",
797
+ "bgtask.started_bg": "{subject} 已在后台启动",
798
+ "bgtask.awaiting_approval": "{subject} 等待审批",
799
+ "bgtask.completed_bg": "{subject} 已在后台完成",
800
+ "bgtask.failed_bg": "{subject} 在后台失败",
801
+ "bgtask.killed": "{subject} 已停止",
802
+ "bgtask.lost": "{subject} 已丢失",
803
+ "bgtask.stopped_reason": "已停止 — {reason}",
804
+ "bgtask.stopped": "已停止",
805
+ "bgtask.waiting": "等待中: {reason}",
806
+ "bgtask.session_restarted": "会话在完成前已重启",
807
+ "bgtask.timed_out": "已超时",
808
+ "mcpstatus.failed": "{count} 失败",
809
+ "mcpstatus.needs_auth": "{count} 需要认证",
810
+ "mcpstatus.connecting": "{count} 连接中",
811
+ "mcpstatus.connected": "{count} 已连接",
812
+ "mcpstatus.disabled_count": "{count} 已禁用",
813
+ "mcpstatus.summary": "MCP 服务器: {detail}",
814
+ "mcpstatus.more_summary": "MCP 服务器: {count} 个更多 ({detail})",
815
+ "permission.manual": "手动",
816
+ "permission.manual_desc": "执行命令、编辑等风险操作前询问。读取/搜索工具直接运行;会话审批规则生效。",
817
+ "permission.auto": "自动",
818
+ "permission.auto_desc": "完全无交互运行。工具操作自动批准,跳过代理问题以便其自行决策。",
819
+ "permission.yolo_desc": "自动批准工具操作和计划转换。需要您输入时代理仍会明确提问。",
820
+ "permission.select_title": "选择权限模式",
821
+ "theme.auto": "自动(跟随终端)",
822
+ "theme.dark": "深色",
823
+ "theme.light": "浅色",
824
+ "theme.select_title": "选择主题",
825
+ "taskviewer.no_output": "[no output captured]",
826
+ "taskviewer.key_line": "行",
827
+ "taskviewer.key_page": "页",
828
+ "taskviewer.key_top_bottom": "顶/底",
829
+ "approvalpreview.key_line": "行",
830
+ "approvalpreview.key_page": "页",
831
+ "approvalpreview.key_top_bottom": "顶/底",
832
+ "approvalpreview.key_back": "返回",
833
+ "apikey.footer": "Enter 提交 · Esc 取消",
834
+ "apikey.title": "输入 {name} 的 API 密钥",
835
+ "apikey.subtitle": "您的密钥将保存到 ~/.scream-code/config.toml",
836
+ "apikey.empty_hint": "API 密钥不能为空。",
837
+ "planbox.title_prefix": " 计划: ",
838
+ "planbox.title_fallback": " 计划 ",
839
+ "planbox.more_lines": "...(还有 {count} 行,按 ctrl+e 展开)",
840
+ "skillact.user_trigger": "(用户触发)",
841
+ "skillact.model_trigger": "(模型调用)",
842
+ "skillact.nested_trigger": "(嵌套调用)",
843
+ "skillact.activated": "▶ 已激活 skill:",
844
+ "mediaurl.audio": "音频",
845
+ "mediaurl.image": "图片",
846
+ "mediaurl.video": "视频",
847
+ "transcript.attachments": "{count} 个附件",
848
+ "transcript.assistant": "助手:",
849
+ "transcript.thinking": "思考:",
850
+ "transcript.tool_name": "工具 {name}:",
851
+ "transcript.activated_skill": "已激活技能:{name}",
852
+ "transcript.more_history": "↑ 还有 {count} 条历史消息",
853
+ "compaction.done": "压缩完成",
854
+ "compaction.canceled": "压缩已取消",
855
+ "compaction.in_progress": "正在压缩上下文...",
856
+ "planmode.plan": "计划模式",
857
+ "planmode.fusionplan": "融合计划模式",
858
+ "todo.title": " 待办",
859
+ "todo.more_items": " … 还有 {count} 项",
860
+ "textinput.footer": "Enter 提交 · Esc 取消",
861
+ "textinput.empty_hint": "输入不能为空。",
862
+ "editor.auto_detect": "自动检测 ($VISUAL / $EDITOR)",
863
+ "editor.select_title": "选择外部编辑器",
864
+ "editorkey.cancel_compaction_failed": "取消压缩失败: {msg}",
865
+ "editorkey.editor_not_configured": "未配置编辑器。请设置 $VISUAL / $EDITOR,或运行 /editor <命令>。",
866
+ "editorkey.external_editor_failed": "外部编辑器失败: {msg}",
867
+ "streamingui.turn_complete_title": "Scream Code 任务完成",
868
+ "streamingui.compacting": "压缩上下文",
869
+ "tc.approved_session": "已批准(当前会话)",
870
+ "tc.approved": "已批准",
871
+ "tc.rejected": "已拒绝",
872
+ "tc.cancelled": "已取消",
873
+ "tc.error_prefix": "错误:",
874
+ "dialog.cc_session_connected": "已连接 CC 会话 ({id})。",
875
+ "dialog.create_session_failed": "创建会话失败",
876
+ "dialog.cc_managed": "CC 会话由 cc-connect 管理,请在聊天通道中操作。",
877
+ "dialog.memo_injected": "已注入备忘录 #{id}",
878
+ "dialog.approval_title": "Scream Code 需要审批",
879
+ "dialog.question_title": "Scream Code 需要您的回答",
880
+ "bgagent.started_bg": "{subject} 已在后台启动",
881
+ "bgagent.completed_bg": "{subject} 已在后台完成",
882
+ "bgagent.failed_bg": "{subject} 在后台失败",
883
+ "tmux.extended_keys_off": "tmux extended-keys 已关闭。修改后的 Enter 键可能无法正常工作。请在 ~/.tmux.conf 中添加 `set -g extended-keys on` 并重启 tmux。",
884
+ "tmux.extended_keys_format_xterm": "tmux extended-keys-format 为 xterm。Scream Code 在 csi-u 模式下工作最佳。请在 ~/.tmux.conf 中添加 `set -g extended-keys-format csi-u` 并重启 tmux。",
885
+ "hookresult.blocked": "已阻止",
886
+ "hookresult.empty": "(空)",
887
+ "anomaly.rapid_refire": "上次压缩结束仅 {elapsed} 秒后再次触发自动压缩。",
888
+ "anomaly.first_step_blowup": "会话首次自动压缩时上下文已达 {pct}%,可能存在巨型文件读取或初始 prompt 过大。",
889
+ "replayhook.blocked": "已阻止",
890
+ "replayhook.empty": "(空)",
891
+ "cronmsg.missed_reminder": "错过的定时提醒",
892
+ "cronmsg.reminder_fired": "定时提醒触发",
893
+ "cronmsg.one_time": "一次性",
894
+ "cronmsg.coalesced": "{count} 次合并触发",
895
+ "cronmsg.missed": "{count} 次错过",
896
+ "cronmsg.final_delivery": "最终投递",
897
+ "thinking.in_progress": "思考中...",
898
+ "shell.more_lines": "...(还有 {count} 行,按 ctrl+o 展开)",
899
+ "ccconnect.note_botfather": "需先在 @BotFather 创建 bot",
900
+ "ccconnect.note_napcat": "需要 NapCat/OneBot",
901
+ "ccconnect.note_wecom": "需要公网 IP",
902
+ "ccconnect.config_comment_attachment": "# 全局:允许/禁止图片和文件回传到聊天(on = 开启,off = 关闭)",
903
+ "ccconnect.reconfigured": "{name} 已配置(配置不会丢失)",
904
+ "ccconnect.config_path": "配置文件:{path}",
905
+ "ccconnect.config_done": "✔ {name} 通道配置完成",
906
+ "ccconnect.config_written": "配置文件已写入:{path}",
907
+ "ccconnect.quick_ref": "📋 常用管理指令(建议复制保存):",
908
+ "ccconnect.pm2_status": " pm2 status 查看运行状态(online = 正常)",
909
+ "ccconnect.pm2_restart": " pm2 restart cc-connect 重启服务",
910
+ "ccconnect.pm2_stop": " pm2 stop cc-connect 停止服务",
911
+ "ccconnect.pm2_logs": " pm2 logs cc-connect 查看日志",
912
+ "ccconnect.pm2_delete": " pm2 delete cc-connect 完全删除",
913
+ "ccconnect.reconfigure_warning": " ⚠ 不要再次运行 /cc-connect 并选择相同平台,否则会覆盖已有配置!",
914
+ "ccconnect.reconfigure_change": " 如需更换平台,请先删除 C:\\Users\\<用户名>\\.cc-connect\\config.toml",
915
+ "ccconnect.init_steps": "📋 初始化步骤(仅首次配置时需要,按顺序执行):",
916
+ "ccconnect.step_platform_auth": " 第 1 步:平台认证{note}",
917
+ "ccconnect.once_tag": "(一次性)",
918
+ "ccconnect.step_n": " 第 {num} 步:{label}{once}",
919
+ "ccconnect.auto_done": " ✅ 已自动完成,无需手动操作 ({command})",
920
+ "ccconnect.more_commands": "更多指令 ({method}):",
921
+ "ccconnect.attachment_hint": "💡 激活附件回传(让 Agent 能发图片和文件):",
922
+ "ccconnect.bind_setup": " 在聊天窗口发送 /bind setup",
923
+ "ccconnect.autostart_hint": "💡 开机自启已通过 Startup 文件夹中的 cc-connect-startup.bat 实现。",
924
+ "ccconnect.manual_restart": " 如需手动重启服务:pm2 resurrect",
925
+ "ccconnect.not_installed": "cc-connect 未安装",
926
+ "ccconnect.install_guide": "请先在终端运行:\n\n npm install -g cc-connect\n\n安装完成后重新输入 /cc-connect 配置平台。",
927
+ "ccconnect.already_configured": "{name} ✔ 已配置",
928
+ "ccconnect.picker_title": "cc-connect 快速通道配置",
929
+ "ccconnect.picker_hint": "选择要连接的平台,配置将自动写入 ~/.cc-connect/config.toml",
930
+ "market.gsap_name": "GSAP 动画技能包",
931
+ "market.gsap_desc": "GreenSock 动画平台全套参考手册,含核心 API、Timeline、ScrollTrigger、插件、React 集成等 8 个技能",
932
+ "market.design_card_name": "Claude Design Card",
933
+ "market.design_card_desc": "14 种设计卡片生成(封面/图文/社交分享/长篇排版),Parchment × Swiss 双风格体系",
934
+ "market.superpowers_name": "Superpowers 开发技能包",
935
+ "market.superpowers_desc": "14 个开发方法论技能:TDD、系统调试、代码审查、子代理驱动开发、并行代理、头脑风暴等",
936
+ "market.scrapling_name": "Scrapling 网页爬取",
937
+ "market.scrapling_desc": "基于 Scrapling 的智能爬虫技能,支持 Cloudflare/WAF 绕过、登录会话、自动抓取解析",
938
+ "market.astock_name": "A 股数据分析",
939
+ "market.astock_desc": "A 股市场数据查询分析,27 个接口覆盖行情/研报/资金流/新闻/基本面,含 4 套内置研究流程",
940
+ "market.humanizer_name": "Humanizer AI 文本去味",
941
+ "market.humanizer_desc": "去除 AI 写作痕迹:30 种 AI 模式检测 × 5 大类 × 语音校准,输出纯正人类文风",
942
+ "market.patent_name": "Patent Disclosure 专利交底书",
943
+ "market.patent_desc": "专利交底书自动生成:专利点挖掘 → 国知局查新 → 脱敏成文 → 自检闭环,Mermaid 附图,输出 .docx",
944
+ "market.contract_name": "Contract Review Pro 合同审查",
945
+ "market.contract_desc": "专业合同审查:7 步工作流 × 5 强制关 × 15 类风险标签 × 六维评估,输出批注合同+法律意见书+分析备忘录,支持 30 种合同类型",
946
+ "market.academic_name": "Academic Research 学术研究",
947
+ "market.academic_desc": "完整学术研究管线:深度研究(13 Agent 团队 × 7 种模式)+ 学术写作(12 Agent 管线)+ 同行评审(7 Agent 多视角审稿),全流程覆盖",
948
+ "market.headroom_name": "Headroom 压缩优化",
949
+ "market.headroom_desc": "在内容送达 LLM 前压缩工具输出、日志、文件和 RAG 块,节省 60-95% Token,答案质量不变",
950
+ "market.xiaohu_wechat_name": "小壶公众号排版",
951
+ "market.xiaohu_wechat_desc": "Markdown → 微信兼容 HTML → 推送草稿箱,30 套主题 + 可视化画廊,一键排版发布",
952
+ "market.huashu_name": "花束设计",
953
+ "market.huashu_desc": "HTML 原生设计技能:高保真原型 / 幻灯片 / 动画 + 20 设计哲学 + 5 维评审 + MP4 导出",
954
+ "market.html_video_name": "HTML Video 视频生成",
955
+ "market.html_video_desc": "HTML 转 MP4:可插拔渲染引擎 + 21 套模板 + AI 配乐,全程本地,零渲染费用",
956
+ "market.xiaohu_translate_name": "小壶视频翻译",
957
+ "market.xiaohu_translate_desc": "外语视频自动配中文字幕:下载 / 转写 / 翻译 / 润色 / 烧录一条龙,全程本地",
958
+ "market.videocut_name": "视频剪辑 Agent",
959
+ "market.videocut_desc": "Claude Code Skills 驱动的视频剪辑 Agent:口播剪辑 / 字幕导入 / 画质高清化",
960
+ "market.taste_name": "Taste Skill 设计品味",
961
+ "market.taste_desc": "给 AI 好品味:阻止生成无聊通用的设计,输出有质感的方案",
962
+ "market.vtake_name": "VTake 视频剪辑",
963
+ "market.vtake_desc": "Agent Skills 驱动的视频剪辑工具",
964
+ "market.remotion_name": "Remotion 视频技能",
965
+ "market.remotion_desc": "Remotion(React 视频框架)官方技能包",
966
+ "market.html_anything_name": "HTML Anything 全能设计",
967
+ "market.html_anything_desc": "75 个技能 × 9 种场景:杂志 / 幻灯片 / 海报 / 小红书 / 数据报告 / 原型,零 API 密钥",
968
+ "market.guizang_name": "归藏社交卡片",
969
+ "market.guizang_desc": "小红书轮播图 + 公众号封面:28 种布局 × 10 套主题,Editorial × Swiss 视觉体系,单文件 HTML → PNG",
970
+ "prompts.logout_title": "选择要登出的提供商",
971
+ "prompts.no_wire_provider": "目录中没有支持该 wire 类型的提供商。",
972
+ "prompts.select_provider": "选择提供商",
973
+ "prompts.wire_openai": "OpenAI 兼容协议",
974
+ "prompts.wire_openai_desc": "适用于 DeepSeek、OpenAI、Groq 等",
975
+ "prompts.wire_anthropic": "Anthropic 协议",
976
+ "prompts.wire_anthropic_desc": "适用于 Claude 系列模型",
977
+ "prompts.thinking_off": "关闭思考",
978
+ "prompts.thinking_low": "低强度思考",
979
+ "prompts.thinking_medium": "中强度思考",
980
+ "prompts.thinking_high": "高强度思考",
981
+ "prompts.image_off": "关闭识图",
982
+ "prompts.image_off_desc": "模型不支持图片输入时请选择此项",
983
+ "prompts.image_on": "开启识图",
984
+ "prompts.image_on_desc": "模型支持图片输入时开启,允许发送图片",
985
+ "prompts.video_off": "关闭视频",
986
+ "prompts.video_off_desc": "模型不支持视频输入时请选择此项",
987
+ "prompts.video_on": "开启视频",
988
+ "prompts.video_on_desc": "模型支持视频输入时开启,允许发送视频",
989
+ "prompts.audio_off": "关闭音频",
990
+ "prompts.audio_off_desc": "模型不支持音频输入时请选择此项",
991
+ "prompts.audio_on": "开启音频",
992
+ "prompts.audio_on_desc": "模型支持音频输入时开启,允许发送音频",
993
+ "prompts.wire_type_title": "选择兼容协议",
994
+ "prompts.wire_type_hint": "选择模型服务商的 API 协议类型",
995
+ "prompts.thinking_title": "思考模式",
996
+ "prompts.thinking_hint": "选择模型思考强度(需要模型支持)",
997
+ "prompts.image_title": "多模态配置 · 图片输入",
998
+ "prompts.video_title": "多模态配置 · 视频输入",
999
+ "prompts.audio_title": "多模态配置 · 音频输入",
1000
+ "prompts.modal_off_hint": "模型不支持请选择关闭",
1001
+ "info.mcp_load_failed": "加载 MCP 服务器失败:{msg}",
1002
+ "config.plan_cleared": "计划已清除",
1003
+ "config.yolo_already_on": "YES 模式已开启",
1004
+ "config.yolo_on": "YES 模式:开启",
1005
+ "config.yolo_on_desc": "工作区工具自动批准。",
1006
+ "config.yolo_already_off": "YES 模式已关闭",
1007
+ "config.yolo_off": "YES 模式:关闭",
1008
+ "config.yolo_toggle_on": "YES 模式:开启",
1009
+ "config.yolo_toggle_on_desc": "工作区工具已自动批准。",
1010
+ "config.auto_already_on": "自动模式已开启",
1011
+ "config.auto_on": "自动模式:开启",
1012
+ "config.auto_on_desc": "工具自动批准。代理不会提问。",
1013
+ "config.auto_already_off": "自动模式已关闭",
1014
+ "config.auto_off": "自动模式:关闭",
1015
+ "config.auto_toggle_on": "自动模式:开启",
1016
+ "config.auto_toggle_on_desc": "工具自动批准。代理不会提问。",
1017
+ "settings.title": "设置",
1018
+ "settings.model": "模型",
1019
+ "settings.model_desc": "切换当前模型和思考模式。",
1020
+ "settings.language": "语言 Language",
1021
+ "settings.language_desc": "切换界面语言 / Switch interface language",
1022
+ "settings.permission": "权限",
1023
+ "settings.permission_desc": "选择工具操作的批准方式。",
1024
+ "settings.theme": "主题",
1025
+ "settings.theme_desc": "更改终端 UI 主题。",
1026
+ "settings.editor": "编辑器",
1027
+ "settings.editor_desc": "设置外部编辑器命令。",
1028
+ "settings.usage": "用量",
1029
+ "settings.usage_desc": "显示会话 token、上下文窗口和计划配额。",
1030
+ "dispatch.session_picker_failed": "打开会话选择器失败:{error}",
1031
+ "dispatch.tasks_browser_failed": "打开任务浏览器失败:{error}",
1032
+ "dispatch.usage_failed": "显示使用情况失败:{error}",
1033
+ "dispatch.status_failed": "显示状态报告失败:{error}",
1034
+ "constant.llm_not_set": "LLM 未设置,运行 /config 自定义模型配置",
1035
+ "constant.no_active_session": "没有活动会话。运行 /config 自定义模型配置。",
1036
+ "constant.ctrl_d_hint": "再次按 Ctrl+D 退出",
1037
+ "constant.ctrl_c_hint": "再次按 Ctrl+C 退出",
1038
+ "tui.resume_warning": "警告:{warning}",
1039
+ "tui.organizing_memory": "正在整理会话记忆...",
1040
+ "tui.skill_failed": "Skill \"{skill}\" 执行失败:{message}",
1041
+ "tui.replay_no_new_session": "历史回放期间无法启动新会话。",
1042
+ "adapter.task_label": "任务 {taskId}",
1043
+ "knowledge.path_placeholder": "/path/to/doc.md 或 /path/to/docs",
1044
+ "knowledge.ingest_summary": "总计: {chunks} chunks, {events} events, {entities} entities",
1045
+ "knowledge.empty_store": "知识库为空,请先用 /knowledge 摄入文档",
1046
+ "knowledge.web_opened": "知识图谱已打开: {url}",
1047
+ "cc.clean_config.detail": " ~/.cc-connect(含会话记录、配置、日志)",
1048
+ "registry.auto_desc": "切换自动权限模式",
1049
+ "registry.yolo_desc": "切换至自动批准模式(yolo)",
1050
+ "registry.wolfpack_desc": "切换群狼协作模式,自动批准+批量并发",
1051
+ "registry.sessions_desc": "浏览并恢复会话",
1052
+ "registry.goal_desc": "查看/管理自动目标",
1053
+ "registry.memory_desc": "浏览、搜索、注入记忆备忘录",
1054
+ "registry.knowledge_desc": "管理本地知识库(摄入/搜索/删除/统计)",
1055
+ "registry.new_desc": "在当前工作区开启新会话",
1056
+ "registry.model_desc": "切换 LLM 模型",
1057
+ "mcp.desktop_desc": "macOS 桌面自动化:截图/点击/键入/滚动/窗口管理(Background delivery,无需聚焦)",
1058
+ "mcp.browser_desc": "浏览器自动化:46 个工具,支持导航/点击/填表/截图/性能分析/内存调试/扩展管理",
1059
+ "kw.title": "Scream 知识图谱",
1060
+ "kw.entity": "实体",
1061
+ "kw.event": "事件",
1062
+ "kw.relation": "关系",
1063
+ "kw.search_placeholder": "搜索...",
1064
+ "kw.btn_reset": "重置",
1065
+ "kw.btn_expand": "全部",
1066
+ "registry.compact_desc": "压缩对话上下文",
1067
+ "registry.make_skill_desc": "从当前会话沉淀工作流为 Skill",
1068
+ "registry.plan_desc": "切换计划模式",
1069
+ "registry.fusionplan_desc": "切换融合计划模式(多子代理并行规划)",
1070
+ "registry.tasks_desc": "浏览后台任务",
1071
+ "registry.help_desc": "显示可用命令和快捷键",
1072
+ "registry.status_desc": "显示当前会话和运行时状态",
1073
+ "registry.usage_desc": "显示 token 用量和上下文窗口",
1074
+ "registry.btw_desc": "在不中断对话的情况下快速提问",
1075
+ "registry.like_desc": "设置你的偏好(昵称、语气、其他偏好)",
1076
+ "registry.mcp_desc": "管理 MCP 服务器(安装/停用/卸载)",
1077
+ "registry.skill_desc": "技能中心,管理 Skill 技能,含激活、安装、卸载等",
1078
+ "registry.cc_desc": "操控你的cc(启动/关闭/重启)",
1079
+ "registry.cc_connect_desc": "cc-connect 快速通道配置(需先安装)",
1080
+ "registry.revoke_desc": "撤回上一次对话(可指定轮数,如 /revoke 3)",
1081
+ "registry.fork_desc": "复制当前会话并新开分支",
1082
+ "registry.title_desc": "设置或显示会话标题",
1083
+ "registry.config_desc": "浏览并配置模型(远程拉取最新目录)",
1084
+ "registry.permission_desc": "选择权限模式",
1085
+ "registry.theme_desc": "设置终端 UI 主题",
1086
+ "registry.language_desc": "切换界面语言 / Switch interface language",
1087
+ "registry.editor_desc": "设置外部编辑器",
1088
+ "registry.settings_desc": "打开 TUI 设置",
1089
+ "registry.init_desc": "分析代码库并生成 AGENTS.md",
1090
+ "registry.export_md_desc": "导出当前会话为 Markdown",
1091
+ "registry.export_debug_desc": "导出当前会话为调试 ZIP 存档",
1092
+ "registry.update_desc": "手动更新 Scream Code 到最新版本",
1093
+ "registry.version_desc": "显示版本信息",
1094
+ "registry.logout_desc": "删除已配置的模型",
1095
+ "registry.exit_desc": "退出应用",
1096
+ "kw.hint_drag": "拖拽平移 · 滚轮缩放 · 单击展开/收起 · 双击详情",
1097
+ "kw.detail_name": "名称",
1098
+ "kw.detail_type": "类型",
1099
+ "kw.detail_category": "分类",
1100
+ "kw.detail_weight": "权重",
1101
+ "kw.detail_description": "描述",
1102
+ "kw.detail_keywords": "关键词",
1103
+ "kw.detail_related": "关联",
1104
+ "kw.btn_collapse": "收起",
1105
+ "kw.btn_expand_all": "全部展开",
1106
+ "kw.btn_collapse_all": "全部收起",
1107
+ "kw.loading": "加载中",
1108
+ "kw.loading_timeout": "数据未在 8 秒内返回,请检查终端",
1109
+ "kw.no_data": "无法加载",
1110
+ "kw.no_data_hint": "请先用 /knowledge 摄入文档",
1111
+ "kw.no_results": "无匹配结果",
1112
+ "kw.back": "返回",
1113
+ "kw.root_label": "根",
1114
+ "kw.close": "关闭",
1115
+ "tui.invalid_config": "~/.scream-code/tui.toml 中的 TUI 配置无效;使用默认配置。",
1116
+ "goal.storm_breaker": "Storm Breaker(风暴守护者)",
1117
+ "goalpanel.goal_placeholder": "<目标描述>",
1118
+ "wolfpack.on": "WolfPack 模式:开启",
1119
+ "wolfpack.on_desc": "批量并发代理已激活。",
1120
+ "wolfpack.off": "WolfPack 模式:关闭",
1121
+ "badge.plan": "计划",
1122
+ "badge.fusion": "融合计划",
1123
+ "badge.wolfpack": "群狼",
1124
+ "badge.goal": "目标",
1125
+ "badge.auto": "自动",
1126
+ "badge.yes": "YES",
1127
+ "kw.lang_toggle": "English",
1128
+ "kw.embedding_downloading": "向量模型下载中…",
1129
+ "kw.embedding_failed": "向量模型加载失败,请返回菜单选择重新下载(建议科学上网)",
1130
+ "kw.embedding_ready": "向量模型已就绪",
1131
+ "kw.embedding_not_downloaded": "向量模型未下载(选择「下载向量模型」手动下载)",
1132
+ "kw.embedding_already_installed": "向量模型已安装,无需重新下载"
1133
+ },
1134
+ en: {
1135
+ "status.not_set": "Not set",
1136
+ "status.none": "None",
1137
+ "status.model_name": "Model",
1138
+ "status.work_dir": "Work dir",
1139
+ "status.permission_mode": "Permission",
1140
+ "status.plan_mode": "Plan mode",
1141
+ "status.session_id": "Session ID",
1142
+ "status.session_title": "Session title",
1143
+ "status.status_warning": "Status warning",
1144
+ "status.context_window": "Context window",
1145
+ "status.no_context_data": "No context window data available.",
1146
+ "tasks.no_session": "No active session.",
1147
+ "tasks.load_failed": "Failed to load tasks: {msg}",
1148
+ "tasks.refresh_output_failed": "Failed to refresh output: {msg}",
1149
+ "tasks.refresh_failed": "Refresh failed: {msg}",
1150
+ "tasks.already_stopped": "{name} is already stopped — no need to stop.",
1151
+ "tasks.refreshing": "Refreshing…",
1152
+ "tasks.stopping": "Stopping {name}…",
1153
+ "tasks.user_stopped": "User initiated stop",
1154
+ "tasks.stop_failed": "Stop failed: {msg}",
1155
+ "tasks.open_output_failed": "Cannot open output: {msg}",
1156
+ "status.idle": "○ Idle",
1157
+ "status.thinking": "Thinking",
1158
+ "status.composing": "Writing",
1159
+ "status.tool": "Running",
1160
+ "status.waiting": "Waiting",
1161
+ "approval.allow_once": "Allow Once",
1162
+ "approval.allow_session": "Allow Session",
1163
+ "approval.deny": "Deny",
1164
+ "approval.deny_feedback": "Deny & Feedback",
1165
+ "approval.revise": "Revise",
1166
+ "approval.approve": "Approve",
1167
+ "approval.edit": "Edit ",
1168
+ "approval.file": "File",
1169
+ "approval.stop_task": "Stop task:",
1170
+ "approval.start": "Start ",
1171
+ "approval.agent": "Agent",
1172
+ "approval.invoke_skill": "Invoke skill ",
1173
+ "approval.fetch": "Fetch ",
1174
+ "approval.search": "Search:",
1175
+ "approval.todo_update": "Update todo list ({count} items)",
1176
+ "approval.background": "Background",
1177
+ "approval.danger.recursive_delete": "Recursive delete",
1178
+ "approval.danger.pipe_to_shell": "Pipe to shell",
1179
+ "approval.danger.dd_write": "dd write",
1180
+ "approval.danger.raw_device": "Write to raw device",
1181
+ "approval.danger.fork_bomb": "Fork bomb",
1182
+ "approval.stop_task_prefix": "Stop task ",
1183
+ "approval.header.command": "Execute this command?",
1184
+ "approval.header.file_write": "Write this file?",
1185
+ "approval.header.file_edit": "Apply these edits?",
1186
+ "approval.header.stop_task": "Stop this task?",
1187
+ "approval.header.plan": "Build according to this plan?",
1188
+ "approval.header.generic": "Approve {name}?",
1189
+ "approval.feedback_hint": "Enter feedback · ↵ to submit.",
1190
+ "common.cancel": "Cancel",
1191
+ "common.confirm": "Confirm",
1192
+ "common.submit": "Submit",
1193
+ "common.back": "Back",
1194
+ "common.close": "Close",
1195
+ "common.delete": "Delete",
1196
+ "common.install": "Install",
1197
+ "common.uninstall": "Uninstall",
1198
+ "common.restart": "Restart",
1199
+ "common.start": "Start",
1200
+ "common.stop": "Stop",
1201
+ "common.off": "Off",
1202
+ "common.on": "On",
1203
+ "common.done": "Done",
1204
+ "common.fail": "Failed",
1205
+ "common.running": "Running",
1206
+ "common.not_set": "Not set",
1207
+ "error.path_empty": "Path cannot be empty",
1208
+ "error.path_not_exist": "Path does not exist: {path}",
1209
+ "error.unsupported_format": "Only .md, .markdown, .txt files are supported",
1210
+ "error.image_not_supported": "Current model does not support image input.",
1211
+ "error.video_not_supported": "Current model does not support video input.",
1212
+ "error.network_timeout": "Network timeout. Check your connection or try with a proxy.",
1213
+ "error.load_failed": "Load failed: {msg}",
1214
+ "error.internal": "Internal error",
1215
+ "error.no_session": "No active session.",
1216
+ "footer.shift_tab": "shift+tab: Plan mode",
1217
+ "footer.model": "/model: Switch model",
1218
+ "footer.ctrl_s": "ctrl+s: Interrupt",
1219
+ "footer.compact": "/compact: Compress context",
1220
+ "footer.ctrl_o": "ctrl+o: Expand tool output",
1221
+ "footer.tasks": "/tasks: Background tasks",
1222
+ "footer.shift_enter": "shift+enter: New line",
1223
+ "footer.init": "/init: Generate AGENTS.md",
1224
+ "footer.at": "@: Mention files",
1225
+ "footer.ctrl_c": "ctrl+c: Cancel",
1226
+ "footer.skill": "/skill: Skill center",
1227
+ "footer.help": "/help: Show commands",
1228
+ "footer.config": "/config: Configure your model provider",
1229
+ "footer.reminder": "Let Scream schedule tasks, e.g. \"remind me to pick up the package in 2 hours\"",
1230
+ "footer.context": "Context: {pct} ({tokens}/{maxTokens})",
1231
+ "footer.context_short": "Context: {pct}",
1232
+ "footer.tasks_running": "{count} tasks running",
1233
+ "footer.agents_running": "{count} agents running",
1234
+ "lifecycle.memory_countdown": "No activity for 15 min, about to extract session memories",
1235
+ "lifecycle.memory_cancel_hint": "Press Ctrl+W to cancel (auto-starts in {seconds}s)",
1236
+ "lifecycle.memory_cancelled": "Memory extraction cancelled",
1237
+ "lifecycle.memory_processing": "Extracting session memories...",
1238
+ "lifecycle.memory_done": "Extracted {count} memories to notebook",
1239
+ "lifecycle.memory_none": "No new memories to extract",
1240
+ "lifecycle.memory_failed": "Memory extraction failed, try again later",
1241
+ "input.replay_blocked": "Cannot send input while session history is replaying.",
1242
+ "input.send_failed": "Send failed: {message}",
1243
+ "input.guide_failed": "Guide failed: {message}",
1244
+ "welcome.config": "/config Configure model",
1245
+ "welcome.sessions": "/sessions Resume session",
1246
+ "welcome.quick_menu": "/ Open quick menu",
1247
+ "welcome.just_now": "just now",
1248
+ "welcome.minutes_ago": "{minutes}m ago",
1249
+ "welcome.hours_ago": "{hours}h ago",
1250
+ "welcome.days_ago": "{days}d ago",
1251
+ "welcome.no_recent": "No recent sessions",
1252
+ "welcome.recent": "Recent sessions",
1253
+ "welcome.like_active": "like active",
1254
+ "welcome.like_inactive": "like not loaded",
1255
+ "welcome.help_hint": "/help for help",
1256
+ "loading.ai": "AI is loading...",
1257
+ "loading.waking": "Waking core...",
1258
+ "loading.press_enter": "Press ENTER to wake core",
1259
+ "loading.quit_hint": "Hold Ctrl+C to quit Scream Code",
1260
+ "language.picker_title": "Language / 语言",
1261
+ "language.picker_hint": "↑↓ Select · Enter confirm · Esc cancel",
1262
+ "language.unchanged": "Language unchanged: \"{locale}\".",
1263
+ "language.save_failed": "Failed to save language: {error}",
1264
+ "language.switched": "Language switched to {locale}",
1265
+ "language.restart_hint": "Restart scream-code for all UI text to take effect",
1266
+ "knowledge.chunking": "Chunking file...",
1267
+ "knowledge.embedding_chunks": "Embedding chunks: {index}/{total}",
1268
+ "knowledge.extracting": "Extracting events: {index}/{total}",
1269
+ "knowledge.embedding_events": "Embedding events: {index}/{total}",
1270
+ "knowledge.embedding_entities": "Embedding entities...",
1271
+ "knowledge.embedding_relations": "Embedding relations...",
1272
+ "knowledge.error": "Error: {msg}",
1273
+ "knowledge.ingest": "Ingest files",
1274
+ "knowledge.ingest_desc": "Enter a markdown/txt file or folder path [Ingestion calls LLM for event extraction; for large files, consider a cost-effective model]",
1275
+ "knowledge.ingesting": "Starting ingest...",
1276
+ "knowledge.ingest_done": "Ingest complete",
1277
+ "knowledge.ingest_fail": "Ingest failed",
1278
+ "knowledge.batch_done": "Batch ingest complete",
1279
+ "knowledge.batch_partial": "Batch ingest complete (some failed)",
1280
+ "knowledge.succeeded": "Succeeded: {count} files",
1281
+ "knowledge.failed": "Failed: {count} files",
1282
+ "knowledge.failed_files": "Failed files:",
1283
+ "knowledge.file_label": "File",
1284
+ "knowledge.docs_title": "Knowledge Documents",
1285
+ "knowledge.empty": "Knowledge base is empty. Use /knowledge to ingest documents first.",
1286
+ "knowledge.search": "Search",
1287
+ "knowledge.search_desc": "Enter a query to test multi-hop retrieval",
1288
+ "knowledge.search_placeholder": "e.g. Who are the competitors of Company A?",
1289
+ "knowledge.searching": "Searching...",
1290
+ "knowledge.search_done": "Search complete",
1291
+ "knowledge.search_fail": "Search failed",
1292
+ "knowledge.search_result": "Search Results",
1293
+ "knowledge.no_hits": "Query \"{query}\" matched no chunks",
1294
+ "knowledge.vector_degraded": "Vector model not ready, using keyword search mode. If download failed, try enabling a proxy and restart.",
1295
+ "knowledge.query_label": "Query",
1296
+ "knowledge.no_title": "(untitled)",
1297
+ "knowledge.source_label": "Source",
1298
+ "knowledge.delete": "Delete",
1299
+ "knowledge.delete_desc": "Delete a document (cascades to related data)",
1300
+ "knowledge.delete_pick": "Select a document to delete",
1301
+ "knowledge.cascade_warning": "Deletion is irreversible. Related chunks/events/entities will be cascade-deleted (Esc to cancel)",
1302
+ "knowledge.cascade_delete": "Cascade delete",
1303
+ "knowledge.confirm_delete": "Confirm Delete",
1304
+ "knowledge.confirm_delete_name": "Delete \"{name}\"?",
1305
+ "knowledge.no_delete_data": "Go back without deleting anything",
1306
+ "knowledge.no_delete": "No documents to delete",
1307
+ "knowledge.delete_fail_not_found": "Delete failed: document not found",
1308
+ "knowledge.deleted": "Deleted",
1309
+ "knowledge.doc_removed": "Document removed from knowledge base",
1310
+ "knowledge.cancelled": "Cancelled",
1311
+ "knowledge.no_delete_doc": "No documents deleted",
1312
+ "knowledge.stats": "Knowledge Base Stats",
1313
+ "knowledge.stats_desc": "View knowledge base statistics",
1314
+ "knowledge.stats_note": "Notes",
1315
+ "knowledge.stats_sources": "Ingested files/sources",
1316
+ "knowledge.stats_documents": "Document metadata records",
1317
+ "knowledge.stats_chunks": "Chunks (split by heading)",
1318
+ "knowledge.stats_events": "LLM-extracted fusion events",
1319
+ "knowledge.stats_entities": "Deduplicated entities",
1320
+ "knowledge.ingest_full": "Ingest knowledge from markdown/txt files or folders (chunk + extract events + extract entities)",
1321
+ "knowledge.doc_list": "Document List",
1322
+ "knowledge.doc_list_desc": "View all ingested documents",
1323
+ "knowledge.search_effect": "Enter a query to test multi-hop retrieval",
1324
+ "knowledge.web": "Graph",
1325
+ "knowledge.web_desc": "View interactive knowledge graph in browser",
1326
+ "knowledge.download_model": "Download vector model",
1327
+ "knowledge.download_model_desc": "Manually download the bge-small-zh-v1.5 model (~95 MB) to enable semantic search",
1328
+ "knowledge.download_model_installed": " (installed)",
1329
+ "knowledge.download_model_retry_hint": "Return to the menu and select Download vector model to retry. A proxy is recommended.",
1330
+ "knowledge.menu_title": "SAG Knowledge Base",
1331
+ "knowledge.menu_hint": "Select an action (Esc to exit)",
1332
+ "knowledge.op_failed": "Operation failed: {msg}",
1333
+ "init.select_title": "Select AGENTS.md location",
1334
+ "init.select_hint": "Current: {currentDir} · Project root: {projectRoot}",
1335
+ "init.current_dir": "Current directory",
1336
+ "init.current_dir_desc": "Generate and analyze current directory only",
1337
+ "init.project_root": "Project root",
1338
+ "init.project_root_desc": "Start from current directory, let AI explore upward to find root",
1339
+ "init.cancelled": "Initialization cancelled",
1340
+ "goal.need_desc": "Please provide a goal description, e.g. /goal implement login",
1341
+ "goal.no_active": "No active goal.",
1342
+ "goal.no_resumable": "No resumable goal. Use /goal <objective> to set a new one.",
1343
+ "goal.set": "🎯 Goal set: {objective}",
1344
+ "goal.paused": "🎯 Goal paused. Use /goal resume to resume.",
1345
+ "goal.resumed": "🎯 Goal resumed.",
1346
+ "goal.cancelled": "🎯 Goal cancelled.",
1347
+ "goal.conflict_loop": "A goal is already active. Cancel it first with /goaloff.",
1348
+ "goal.create_failed": "Failed to create goal: {msg}",
1349
+ "goal.pause_failed": "Failed to pause goal: {msg}",
1350
+ "goal.resume_failed": "Failed to resume goal: {msg}",
1351
+ "goal.cancel_failed": "Failed to cancel goal: {msg}",
1352
+ "goal.status_failed": "Failed to get goal status: {msg}",
1353
+ "goal.resume_hint": "Continue the current goal.",
1354
+ "goal.wizard_title": "Goal: {objective}",
1355
+ "goal.budget_turns_hint": "Turn limit (0 = unlimited)",
1356
+ "goal.budget_tokens_hint": "Token limit (0 = unlimited)",
1357
+ "goal.budget_time_hint": "Time limit in minutes (0 = unlimited)",
1358
+ "update.timeout": "Timed out, possibly due to network issues.",
1359
+ "update.network_hint": "Check your network and retry (users in China may need a proxy).",
1360
+ "update.network_error": "Failed: network error. Check your connection and retry.",
1361
+ "update.network_hint_retry": "(Users in China may need a proxy. Retry if you get network errors.)",
1362
+ "update.failed": "Failed: {msg}",
1363
+ "update.signal": "Signal",
1364
+ "update.exit_code": "Exit code",
1365
+ "update.idle_only": "Please run updates when idle.",
1366
+ "update.checking": "Checking for updates...",
1367
+ "update.already_latest": "Already on latest version ({version})",
1368
+ "update.updating": "Updating to {version}...",
1369
+ "update.npm_install": "Installing latest version via npm...",
1370
+ "update.install_label": "Install scream-code",
1371
+ "update.done": "Update complete. Restart Scream Code to use the new version.",
1372
+ "mcp.connecting": "⏳ Connecting",
1373
+ "mcp.connected": "🔌 Connected",
1374
+ "mcp.failed": "❌ Failed",
1375
+ "mcp.disabled": "⏸ Disabled",
1376
+ "mcp.auth_required": "🔐 Auth required",
1377
+ "mcp.load_failed": "Failed to load MCP server: {msg}",
1378
+ "mcp.install_success": "{name} installed and started.",
1379
+ "mcp.install_fail": "{name} installation failed.",
1380
+ "mcp.uninstall_confirm": "Uninstall \"{name}\"?",
1381
+ "mcp.already_installed": "{name} is already installed.",
1382
+ "mcp.disabled_done": "{name} disabled.",
1383
+ "mcp.uninstalled": "{name} uninstalled.",
1384
+ "mcp.no_session": "Please create or resume a session first.",
1385
+ "mcp.manage_title": "MCP Management ({count} connected)",
1386
+ "mcp.no_installed": "No MCP servers installed",
1387
+ "mcp.recommended": "Recommended MCP (Enter to install)",
1388
+ "mcp.installed": "Installed",
1389
+ "mcp.install_enter": "Enter to install",
1390
+ "mcp.confirm_uninstall": "Confirm Uninstall",
1391
+ "mcp.uninstall_yes": "Yes, uninstall",
1392
+ "mcp.installing": "Installing",
1393
+ "mcp.configuring": "Configuring",
1394
+ "mcp.network_timeout": "Network timeout. Check your connection or try with a proxy.",
1395
+ "mcp.install_failed": "Install failed: {msg}",
1396
+ "mcp.disable_failed": "Disable failed: {msg}",
1397
+ "mcp.detected_starting": "Detected installation, starting...",
1398
+ "mcp.start_failed": "Start failed: {msg}",
1399
+ "mcp.uninstall_done": "Uninstalled.",
1400
+ "mcp.uninstall_failed": "Uninstall failed: {msg}",
1401
+ "mcp.footer_hint": "Enter install/toggle d uninstall Esc back",
1402
+ "mcp.macos_only": "macOS only",
1403
+ "cc.start": "Start",
1404
+ "cc.stop": "Stop",
1405
+ "cc.restart": "Restart",
1406
+ "cc.uninstall": "Uninstall",
1407
+ "cc.start_desc": "Start cc-connect daemon",
1408
+ "cc.stop_desc": "Stop cc-connect daemon",
1409
+ "cc.restart_desc": "Restart cc-connect daemon",
1410
+ "cc.uninstall_desc": "Completely uninstall cc-connect (daemon + config + npm package)",
1411
+ "cc.manage_title": "cc-connect Daemon Management",
1412
+ "cc.operating": "{label} cc-connect...",
1413
+ "cc.started": "cc-connect {label}",
1414
+ "cc.start_failed": "{label} failed: {output}",
1415
+ "cc.will_clean": "The following will be cleaned up:",
1416
+ "cc.clean_daemon": "· Stop and uninstall {label} daemon",
1417
+ "cc.clean_config": "· Delete config directory{detail}",
1418
+ "cc.current_version": "· Current version: {version}",
1419
+ "cc.install_path": "· Install path: {path}",
1420
+ "cc.clean_pm2": "· Remove pm2 process + startup items (startup.bat / schtasks)",
1421
+ "cc.clean_residual": "· Clean {count} residual files (launchd/systemd/pm2 logs)",
1422
+ "cc.not_detected": "cc-connect installation not detected",
1423
+ "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.",
1424
+ "cc.uninstalling": "Uninstalling cc-connect…",
1425
+ "cc.stop_daemon": "Stop daemon",
1426
+ "cc.delete_label": "Delete",
1427
+ "cc.clean_files": "Clean residual files",
1428
+ "cc.uninstall_done": "cc-connect completely uninstalled",
1429
+ "cc.uninstall_partial": "Some steps failed, see details below",
1430
+ "cc.uninstalled": "cc-connect uninstalled",
1431
+ "cc.restart_hint": "Restart Scream Code to ensure cc-connect state is fully cleared.",
1432
+ "cc.uninstall_partial_label": "Uninstall partially failed",
1433
+ "cc.residual": "Residual",
1434
+ "cc.confirm_uninstall": "Completely uninstall cc-connect?",
1435
+ "cc.uninstall_irreversible": "This cannot be undone. All cc-connect data will be removed.",
1436
+ "cc.confirm_uninstall_btn": "Confirm Uninstall",
1437
+ "auth.fetching_models": "Fetching latest model catalog...",
1438
+ "auth.no_providers": "No model providers configured.",
1439
+ "auth.deleted": "Deleted provider: {name}",
1440
+ "auth.input_api_url": "Enter provider API URL",
1441
+ "auth.api_url_hint": "e.g. https://api.deepseek.com (paste supported)",
1442
+ "auth.input_api_key": "Enter API Key",
1443
+ "auth.api_key_hint": "Key saved to ~/.scream/config.toml (paste supported, Esc to cancel)",
1444
+ "auth.input_model": "Enter model name",
1445
+ "auth.model_hint": "e.g. deepseek-v4-flash",
1446
+ "auth.input_context": "Enter max context length (tokens)",
1447
+ "auth.context_hint": "Default 131072, DeepSeek V4: 1000000",
1448
+ "auth.connected": "Connected: {name}",
1449
+ "like.priority": "User preferences set via /like have the highest priority and must be followed in every response.",
1450
+ "like.nickname": "Set nickname",
1451
+ "like.nickname_hint": "What should I call you? Leave empty to skip.",
1452
+ "like.nickname_example": "e.g. Alex",
1453
+ "like.tone": "Set response tone",
1454
+ "like.tone_hint": "e.g. friendly, professional, humorous, concise (leave empty to skip)",
1455
+ "like.tone_example": "e.g. friendly yet professional",
1456
+ "like.other": "Other preferences",
1457
+ "like.other_hint": "e.g. more examples, conclusion first, avoid jargon (leave empty to skip)",
1458
+ "like.other_example": "e.g. Answer in English, avoid abbreviations",
1459
+ "like.cancelled": "/like setup cancelled",
1460
+ "like.saved": "Preferences saved (takes effect in next session)",
1461
+ "revoke.streaming": "Cannot revoke during streaming — press Esc or Ctrl-C to cancel first.",
1462
+ "revoke.usage": "Usage: /revoke [count], where count is a positive integer.",
1463
+ "revoke.nothing": "Nothing to revoke.",
1464
+ "revoke.failed": "Revoke failed: {msg}",
1465
+ "btw.usage": "/btw usage",
1466
+ "btw.desc": "Ask a quick question without interrupting the current conversation.",
1467
+ "btw.example1": "Example: /btw How many packages does this project have?",
1468
+ "btw.example2": "Example: /btw When does useEffect cleanup run?",
1469
+ "btw.no_session": "Please create or resume a session before using /btw.",
1470
+ "session.exporting_md": "Exporting session as Markdown…",
1471
+ "session.no_messages": "No messages to export.",
1472
+ "session.exporting": "Exporting session…",
1473
+ "memory.inject_prefix": "[The user injected the following history from the memory notebook]",
1474
+ "memory.history_title": "History Memo",
1475
+ "memory.requirement": "Requirement",
1476
+ "memory.plan": "Plan",
1477
+ "memory.plan_none": "(none)",
1478
+ "memory.result": "Result",
1479
+ "memory.pitfall": "Pitfalls",
1480
+ "memory.pitfall_none": "None",
1481
+ "memory.experience": "Lessons learned",
1482
+ "memory.experience_none": "None",
1483
+ "memory.source_session": "Source session",
1484
+ "memory.record_time": "Recorded at",
1485
+ "memory.inject_hint": "Please refer to the above experience when handling the current task. Pay special attention to pitfalls — do not repeat those errors.",
1486
+ "makeskill.wait": "Please wait for the current response to finish before using /make-skill",
1487
+ "dialog.nav": "↑↓ Navigate",
1488
+ "dialog.page": "←→ Page",
1489
+ "dialog.select": "Enter Select",
1490
+ "dialog.cancel": "Esc Cancel",
1491
+ "dialog.search_placeholder": "(type to search)",
1492
+ "title.dialog_title": "Session Title",
1493
+ "title.placeholder": "Enter new session title…",
1494
+ "session.title": "Sessions",
1495
+ "session.loading": "Loading sessions...",
1496
+ "session_picker.empty": "No sessions found. Press Escape to close.",
1497
+ "session_picker.cc_restricted": "CC sessions cannot be switched or deleted. Use the file path below to manage manually",
1498
+ "session.picker_title": "Sessions ",
1499
+ "session.delete_confirm": "⚠️ Press Enter to confirm delete, Esc to cancel",
1500
+ "session.picker_hint": "(↑↓ Navigate, Enter Select, d Delete, Esc Cancel)",
1501
+ "model.nav_model": "↑↓ Model",
1502
+ "model.nav_thinking": "←→ Thinking",
1503
+ "model.nav_page": "PgUp/PgDn Page",
1504
+ "model.nav_select": "Enter Switch model",
1505
+ "model.nav_cancel": "Esc Cancel",
1506
+ "model.search_placeholder": "(type to search)",
1507
+ "model.select_title": " Select Model",
1508
+ "model.search_label": " Search: ",
1509
+ "model.thinking_global": " Thinking (Global)",
1510
+ "model.multimodal": " Multimodal",
1511
+ "model.image": "Image",
1512
+ "model.supported": "✓ Supported",
1513
+ "model.not_supported": "✗ Not supported",
1514
+ "model.video": "Video",
1515
+ "model.audio": "Audio",
1516
+ "help.toggle_plan": "Toggle plan mode",
1517
+ "help.toggle_output": "Toggle tool output expansion",
1518
+ "help.interrupt": "Interrupt — insert follow-up prompt during streaming",
1519
+ "help.newline": "Insert newline",
1520
+ "help.cancel_stream": "Cancel stream / Clear input",
1521
+ "help.exit": "Exit (when input is empty)",
1522
+ "help.close_dialog": "Close dialog / Cancel stream",
1523
+ "help.browse_history": "Browse input history",
1524
+ "help.submit": "Submit",
1525
+ "help.title": " Help ",
1526
+ "help.close_hint": "Esc / Enter / q Close · ↑↓ Scroll",
1527
+ "help.welcome_msg": "Scream is ready to help! Send a message to get started.",
1528
+ "help.hidden_commands": "/config diy Custom model provider /model diy Multi-agent orchestration",
1529
+ "help.shortcuts": "Keyboard Shortcuts",
1530
+ "help.slash_commands": "Slash Commands",
1531
+ "help.showing_range": "Showing {start}-{end} / {total}",
1532
+ "question.other": "Other",
1533
+ "question.unanswered": "Not answered",
1534
+ "question.check_before_submit": "Review your answers before submitting",
1535
+ "question.ready_to_submit": "Ready to submit your answers?",
1536
+ "question.partial_unanswered": "Some questions are not answered yet.",
1537
+ "question.submit": "Submit",
1538
+ "question.cancel": "Cancel",
1539
+ "question.label": " Question",
1540
+ "question.input_hint": " Type your answer, then press Enter to save.",
1541
+ "question.more_lines": "more lines",
1542
+ "question.showing_range": "Showing {start}-{end} / {total}",
1543
+ "question.input_placeholder": "Enter answer",
1544
+ "question.save_hint": "↵ Save",
1545
+ "question.tab_switch": "tab Switch",
1546
+ "question.esc_cancel": "esc Cancel",
1547
+ "question.arrow_select": "▲/▼ Select",
1548
+ "question.tab_arrow_switch": "←/→/tab Switch",
1549
+ "question.enter_confirm": "↵ Confirm",
1550
+ "question.toggle": "Toggle",
1551
+ "question.choose": "Select",
1552
+ "memory.just_now": "just now",
1553
+ "memory.minutes_ago": "{minutes}m ago",
1554
+ "memory.hours_ago": "{hours}h ago",
1555
+ "memory.days_ago": "{days}d ago",
1556
+ "memory.compaction_extract": "Compaction",
1557
+ "memory.manual_record": "Manual",
1558
+ "memory.exit_extract": "Exit extraction",
1559
+ "memory.search_label": "Search: ",
1560
+ "memory.notebook_title": "Memory Notebook ",
1561
+ "memory.esc_clear_search": "(Esc clear search)",
1562
+ "memory.nav_hint": "(↑↓ Navigate, Enter View, i Inject, d Delete, / Search, Esc Close)",
1563
+ "memory.loading": "Loading...",
1564
+ "memory.no_match": "No memories matching \"{query}\".",
1565
+ "memory.empty": "No memories yet.",
1566
+ "memory.auto_extract_hint": " Memories are extracted automatically when compacting or exiting a session.",
1567
+ "memory.deleting": "Delete: ",
1568
+ "memory.delete_confirm_hint": " Press Enter to confirm delete, Esc to cancel",
1569
+ "memory.showing_range": "{start}-{end} / {total} items",
1570
+ "memory.id_label": "ID: ",
1571
+ "memory.source_label": "Source: ",
1572
+ "memory.project_label": "Project: ",
1573
+ "memory.tags_label": "Tags: ",
1574
+ "memory.plan_label": "Plan: ",
1575
+ "memory.requirement_label": "Requirement: ",
1576
+ "memory.result_label": "Result: ",
1577
+ "memory.session_label": "Session: ",
1578
+ "memory.pitfall_label": "Pitfalls: ",
1579
+ "memory.experience_label": "Experience: ",
1580
+ "memory.detail_nav_hint": " Enter/Esc Back | i Inject | d Delete",
1581
+ "skill.no_session": "Please create or resume a session before using the Skill center.",
1582
+ "skill.loading": "Loading Skill center…",
1583
+ "skill.center_title": "Skill Center",
1584
+ "skill.no_skills": "No skills installed and no skill packages available.",
1585
+ "skill.footer_hint": "Enter activate/install · d uninstall · i install & inject · Esc back",
1586
+ "skill.installed": "Installed Skills",
1587
+ "skill.installable": "Available Skill Packages",
1588
+ "skill.not_installed": "Not installed",
1589
+ "skill.no_session_activate": "Not connected to a session. Please create or resume one first.",
1590
+ "skill.not_found": "Skill not found",
1591
+ "skill.installing_package": "Installing skill package…",
1592
+ "skill.installed_injected": "Installed and injected into current session.",
1593
+ "skill.plugin_installed": "Plugin installed",
1594
+ "skill.no_manual_skill": "Installed successfully, but this package has no manually activatable skills.",
1595
+ "skill.install_failed": "Install failed.",
1596
+ "skill.install_failed_msg": "Install failed: {msg}",
1597
+ "skill.select_activate": "Select a Skill to activate",
1598
+ "skill.select_hint": "Enter to activate · Esc to go back",
1599
+ "skill.uninstall_whole_pkg": "Will uninstall the entire package ({count} skills). Cannot remove individual skills.",
1600
+ "skill.uninstall_single": "Will uninstall the entire Skill package",
1601
+ "skill.uninstalling": "Uninstalling",
1602
+ "skill.uninstalled": "Uninstalled.",
1603
+ "skill.plugin_uninstalled": "Plugin uninstalled",
1604
+ "skill.plugin_removed": "This plugin's skills have been removed from the current session. No restart needed.",
1605
+ "skill.uninstall_failed": "Uninstall failed.",
1606
+ "skill.uninstall_failed_msg": "Uninstall failed: {msg}",
1607
+ "skill.deleting_skill": "Will delete the skill directory and sub-skills",
1608
+ "skill.deleting": "Deleting",
1609
+ "skill.deleted": "Deleted.",
1610
+ "skill.skill_deleted": "Skill deleted",
1611
+ "skill.skill_removed": "This skill and its sub-skills have been removed from the current session.",
1612
+ "skill.delete_failed": "Delete failed.",
1613
+ "skill.delete_failed_msg": "Delete failed: {msg}",
1614
+ "skill.confirm_uninstall": "Uninstall \"{label}\"?",
1615
+ "skill.uninstall_reversible": "You can reinstall from the Skill center later",
1616
+ "skill.uninstall_yes": "Yes, uninstall",
1617
+ "toolcall.bg_agent_lost": "Background agent lost (session restarted before completion)",
1618
+ "toolcall.bg_agent_terminated": "Background agent terminated",
1619
+ "toolcall.bg_agent_failed": "Background agent failed",
1620
+ "toolcall.current_plan": "Current Plan",
1621
+ "toolcall.approved": "Approved: {chosen}",
1622
+ "toolcall.approved_label": "Approved",
1623
+ "toolcall.input_unavailable": "Could not collect your input",
1624
+ "toolcall.input_collected": "Collected your answer",
1625
+ "toolcall.waiting_input": "Waiting for your input",
1626
+ "toolcall.used": "Used",
1627
+ "toolcall.truncated": "Truncated",
1628
+ "toolcall.in_use": "Using",
1629
+ "toolcall.sub_agent_named": "Sub agent {name} ({id})",
1630
+ "toolcall.sub_agent": "Sub agent ({id})",
1631
+ "toolcall.more_tools": "{count} more tool calls...",
1632
+ "toolcall.agent_used": "{name} used {tool}",
1633
+ "toolcall.agent_in_use": "{name} using {tool}",
1634
+ "toolcall.starting": "Starting…",
1635
+ "toolcall.running": "Running",
1636
+ "toolcall.completed": "Completed",
1637
+ "toolcall.tool_count": "{count} tools",
1638
+ "toolcall.failed": "Failed",
1639
+ "toolcall.bg_running": "Background",
1640
+ "toolcall.truncation_notice": "Tool call arguments truncated due to max_tokens — call not executed.",
1641
+ "toolcall.lines_hidden": "...({hidden} more lines, {total} total, press ctrl+o to expand)",
1642
+ "toolcall.preparing_changes": "Preparing changes{path}...{bytes} · Elapsed {elapsed}",
1643
+ "toolcall.rejected": "Rejected",
1644
+ "toolcall.suggestion": "Suggestion",
1645
+ "toolcall.question_ignored": "User ignored the question.",
1646
+ "toolcall.question_label": "Q",
1647
+ "readgroup.reading": "Reading {count} files…",
1648
+ "readgroup.read": "Read {count} files",
1649
+ "readgroup.failed_suffix": " · failed",
1650
+ "readgroup.lines_suffix": " · {count} lines",
1651
+ "readgroup.failed_count": " · {count} failed",
1652
+ "readgroup.reading_suffix": " · reading…",
1653
+ "readgroup.conflict_suffix": "conflict",
1654
+ "handler.oauth_page_opened": "Opened authorization page for {serverName} in browser",
1655
+ "handler.mcp_sync_failed": "Failed to sync MCP server status: {message}",
1656
+ "handler.max_tokens_truncated": "Model hit max_tokens limit — tool calls truncated before execution.",
1657
+ "handler.max_tokens_no_tool": "Model hit max_tokens limit — no tool calls issued.",
1658
+ "handler.max_tokens_hint": "If this limit is unsuitable for your model, set `max_output_size` for the model alias in scream-code config.",
1659
+ "handler.user_interrupted": "User interrupted",
1660
+ "handler.max_steps_reached": "Per-turn step limit reached (max_steps)",
1661
+ "handler.step_interrupted": "Step interrupted ({reason})",
1662
+ "handler.warning_prefix": "Warning: {message}",
1663
+ "handler.mcp_server_failed": "MCP server \"{name}\" failed{error}",
1664
+ "handler.mcp_server_needs_auth": "MCP server \"{name}\" requires OAuth authentication, run /mcp",
1665
+ "handler.mcp_server_disabled": "MCP server \"{name}\" disabled",
1666
+ "handler.mcp_server_connecting": "MCP server \"{name}\" connecting…",
1667
+ "handler.skill_activated": "Skill activated: {skillName}",
1668
+ "handler.storm_breaker_title": "Storm Breaker",
1669
+ "handler.storm_breaker_detail": "Abnormal compaction cadence detected: {detail}Possible tool-call loop or excessive output. Check recent conversation steps.",
1670
+ "session.not_found": "Session \"{sessionId}\" not found.",
1671
+ "session.wrong_dir": "Session \"{sessionId}\" was created in a different directory.\n cd \"{workDir}\" && scream -r {sessionId}",
1672
+ "session.no_resumable": "No resumable session in \"{workDir}\"; starting a new session.",
1673
+ "session.init_failed": "Session initialization failed.",
1674
+ "session.already_in": "Already in this session.",
1675
+ "session.switch_streaming": "Cannot switch session during streaming — press Esc or Ctrl-C first.",
1676
+ "session.switch_replaying": "Cannot switch session during history replay.",
1677
+ "session.resume_failed": "Failed to resume session {sessionId}: {msg}",
1678
+ "session.resumed": "Session resumed ({sessionId}).",
1679
+ "session.replay_failed": "Failed to replay session history: {msg}",
1680
+ "session.resume_warning": "Warning: {warning}",
1681
+ "session.new_replaying": "Cannot start a new session during history replay.",
1682
+ "session.new_failed": "Failed to start new session: {msg}",
1683
+ "session.setup_failed": "Post-creation setup failed: {msg}",
1684
+ "session.new_started": "New session started ({sessionId}).",
1685
+ "replay.history_unavailable": "Session history is unavailable.",
1686
+ "replay.history_failed": "Failed to replay session history: {message}",
1687
+ "replay.skill_activated": "Skill activated: {skillName}",
1688
+ "replay.yes_mode_on": "YES mode: ON",
1689
+ "replay.yes_mode_on_detail": "All operations will be auto-approved. Use with caution.",
1690
+ "replay.yes_mode_off": "YES mode: OFF",
1691
+ "replay.permission_mode": "Permission mode: {mode}",
1692
+ "replay.approved_session": "Approved (this session)",
1693
+ "replay.approved": "Approved",
1694
+ "replay.rejected": "Rejected",
1695
+ "replay.cancelled": "Cancelled",
1696
+ "replay.plan_revise": "Plan returned for revision",
1697
+ "replay.plan_rejected": "Plan review rejected",
1698
+ "replay.plan_cancelled": "Plan review cancelled",
1699
+ "replay.feedback_prefix": "Feedback: {feedback}",
1700
+ "replay.bg_failed_suffix": " failed in background",
1701
+ "replay.bg_lost_suffix": " lost in background",
1702
+ "replay.bg_stopped_suffix": " stopped",
1703
+ "skill.source_label": "Source:",
1704
+ "skill.plugin_label": "Plugin:",
1705
+ "taskbrowser.running": "running",
1706
+ "taskbrowser.awaiting": "awaiting",
1707
+ "taskbrowser.completed": "completed",
1708
+ "taskbrowser.interrupted": "interrupted",
1709
+ "taskbrowser.total": "total",
1710
+ "taskbrowser.stop": "Stop",
1711
+ "taskbrowser.confirm": "Confirm",
1712
+ "taskbrowser.cancel": "Cancel",
1713
+ "taskbrowser.select": "Select",
1714
+ "taskbrowser.output": "Output",
1715
+ "taskbrowser.stop_action": "Stop",
1716
+ "taskbrowser.refresh": "Refresh",
1717
+ "taskbrowser.filter": "Filter",
1718
+ "taskbrowser.exit": "Exit",
1719
+ "taskbrowser.no_active": "No active tasks. Tab = show all.",
1720
+ "taskbrowser.no_tasks": "No background tasks in this session.",
1721
+ "taskbrowser.select_task": "Select a task from the list.",
1722
+ "taskbrowser.detail": "Detail",
1723
+ "taskbrowser.task_id": "Task ID: ",
1724
+ "taskbrowser.status": "Status: ",
1725
+ "taskbrowser.description": "Desc: ",
1726
+ "taskbrowser.command": "Command: ",
1727
+ "taskbrowser.running_time": "Running",
1728
+ "taskbrowser.completed_time": "Completed",
1729
+ "taskbrowser.time": "Time: ",
1730
+ "taskbrowser.process_id": "PID: ",
1731
+ "taskbrowser.exit_code": "Exit code: ",
1732
+ "taskbrowser.stop_reason": "Stop reason: ",
1733
+ "taskbrowser.timed_out": "Timed out: ",
1734
+ "taskbrowser.yes": "Yes",
1735
+ "taskbrowser.awaiting_label": "Awaiting: ",
1736
+ "subagent.desc_coder": "General software engineering",
1737
+ "subagent.desc_reviewer": "Code review, bug & API contract violations",
1738
+ "subagent.desc_writer": "Content production & research reports",
1739
+ "subagent.desc_explore": "Quick codebase exploration (read-only)",
1740
+ "subagent.desc_oracle": "Deep debugging & architecture decisions",
1741
+ "subagent.desc_plan": "Implementation planning & architecture design (read-only)",
1742
+ "subagent.desc_verify": "Run build/test/lint to verify changes",
1743
+ "subagent.follow_main": "Follow main model",
1744
+ "subagent.follow_main_desc": "Use the main agent's current model (default)",
1745
+ "subagent.title": "Subagent Model Binding",
1746
+ "subagent.hint": "↑↓ Select subagent · Enter bind model · Esc cancel",
1747
+ "subagent.bind_title": "Bind {profile}",
1748
+ "subagent.model_hint": "↑↓ Select model · Enter confirm · Esc back",
1749
+ "subagent.save_failed": "Save failed: {msg}",
1750
+ "kdoctree.no_title": "(untitled)",
1751
+ "kdoctree.empty": "(empty)",
1752
+ "kdoctree.move": "Move",
1753
+ "kdoctree.expand": "Expand",
1754
+ "kdoctree.collapse": "Collapse",
1755
+ "kdoctree.top_bottom": "Top/Bot",
1756
+ "kdoctree.back": "Back",
1757
+ "usage.no_token": "No token usage recorded yet.",
1758
+ "usage.input": "Input",
1759
+ "usage.output": "Output",
1760
+ "usage.total": "Total",
1761
+ "usage.managed_title": "Managed Usage",
1762
+ "usage.no_data": "No usage data available.",
1763
+ "usage.used": "used",
1764
+ "usage.session_title": "Session Usage",
1765
+ "usage.context_window": "Context Window",
1766
+ "usage.subagent_title": "Sub-Agent Usage",
1767
+ "usage.panel_title": " Usage ",
1768
+ "agentgroup.n_agent_done": "{total} {name} agent(s) done",
1769
+ "agentgroup.n_agents_done": "{total} agent(s) done",
1770
+ "agentgroup.running_n_agents": "Running {total} agent(s)",
1771
+ "agentgroup.done": "done",
1772
+ "agentgroup.failed": "failed",
1773
+ "agentgroup.running": "running",
1774
+ "agentgroup.running_n_agents_mixed": "Running {total} agent(s) ({parts})",
1775
+ "agentgroup.no_desc": "(no description)",
1776
+ "agentgroup.error": "Error: ",
1777
+ "agentgroup.initializing": "Initializing…",
1778
+ "agentgroup.check_done": "✓ Done",
1779
+ "agentgroup.cross_failed": "✗ Failed",
1780
+ "agentgroup.bg_running": "◐ Background",
1781
+ "mcppanel.connected": "Connected",
1782
+ "mcppanel.pending": "Pending",
1783
+ "mcppanel.needs_auth": "Auth required",
1784
+ "mcppanel.failed": "Failed",
1785
+ "mcppanel.disabled": "Disabled",
1786
+ "mcppanel.tools_available": "{count} tool(s) available",
1787
+ "mcppanel.servers": "Servers",
1788
+ "mcppanel.no_config": "No MCP servers configured. Run /mcp to add one.",
1789
+ "mcppanel.name": "Name",
1790
+ "mcppanel.status": "Status",
1791
+ "mcppanel.transport": "Transport",
1792
+ "mcppanel.tools": "Tools",
1793
+ "mcppanel.error": "Error: ",
1794
+ "mcppanel.action": "Action: ",
1795
+ "mcppanel.run_mcp": "Run /mcp to manage servers.",
1796
+ "goalpanel.active": "▶ Running",
1797
+ "goalpanel.complete": "✅ Complete",
1798
+ "goalpanel.blocked": "🚫 Blocked",
1799
+ "goalpanel.paused": "⏸ Paused",
1800
+ "goalpanel.no_goal": "No goal set",
1801
+ "goalpanel.create_goal": "Create and start a goal",
1802
+ "goalpanel.pause_goal": "Pause current goal",
1803
+ "goalpanel.resume_goal": "Resume paused goal",
1804
+ "goalpanel.cancel_goal": "Cancel current goal",
1805
+ "goalpanel.no_stop_condition": " No stop condition — runs until evaluated complete.",
1806
+ "kresult.empty": "(empty)",
1807
+ "kresult.line": "Line",
1808
+ "kresult.page": "Page",
1809
+ "kresult.top_bottom": "Top/Bot",
1810
+ "kresult.back": "Back",
1811
+ "export.thinking": "Thinking",
1812
+ "export.image": "[Image]",
1813
+ "export.audio": "[Audio]",
1814
+ "export.video": "[Video]",
1815
+ "export.tool_call": "#### Tool call: {name}",
1816
+ "export.tool_result": "Tool result: {name}",
1817
+ "export.unknown": "Unknown",
1818
+ "export.turn": "## Turn {number}",
1819
+ "export.user": "### User",
1820
+ "export.assistant": "### Assistant",
1821
+ "export.system": "### System",
1822
+ "export.overview": "## Overview",
1823
+ "export.topic": "- **Topic**: {topic}",
1824
+ "export.topic_empty": "- **Topic**: (empty)",
1825
+ "export.conversation_stats": "- **Conversation**: {turns} turns | {toolCalls} tool calls",
1826
+ "export.session_title": "# Scream Session Export",
1827
+ "bgtask.agent_task": "Agent task",
1828
+ "bgtask.bash_task": "Bash task",
1829
+ "bgtask.started_bg": "{subject} started in background",
1830
+ "bgtask.awaiting_approval": "{subject} awaiting approval",
1831
+ "bgtask.completed_bg": "{subject} completed in background",
1832
+ "bgtask.failed_bg": "{subject} failed in background",
1833
+ "bgtask.killed": "{subject} stopped",
1834
+ "bgtask.lost": "{subject} lost",
1835
+ "bgtask.stopped_reason": "Stopped — {reason}",
1836
+ "bgtask.stopped": "Stopped",
1837
+ "bgtask.waiting": "Waiting: {reason}",
1838
+ "bgtask.session_restarted": "Session restarted before completion",
1839
+ "bgtask.timed_out": "Timed out",
1840
+ "mcpstatus.failed": "{count} failed",
1841
+ "mcpstatus.needs_auth": "{count} need auth",
1842
+ "mcpstatus.connecting": "{count} connecting",
1843
+ "mcpstatus.connected": "{count} connected",
1844
+ "mcpstatus.disabled_count": "{count} disabled",
1845
+ "mcpstatus.summary": "MCP servers: {detail}",
1846
+ "mcpstatus.more_summary": "MCP servers: {count} more ({detail})",
1847
+ "permission.manual": "Manual",
1848
+ "permission.manual_desc": "Ask before risky operations like running commands or editing files. Read/search tools run directly; session approval rules apply.",
1849
+ "permission.auto": "Auto",
1850
+ "permission.auto_desc": "Run fully without interaction. Tool operations are auto-approved; agent questions are skipped so it can decide on its own.",
1851
+ "permission.yolo_desc": "Auto-approve tool operations and plan transitions. The agent will still explicitly ask when it needs your input.",
1852
+ "permission.select_title": "Select permission mode",
1853
+ "theme.auto": "Auto (follow terminal)",
1854
+ "theme.dark": "Dark",
1855
+ "theme.light": "Light",
1856
+ "theme.select_title": "Select theme",
1857
+ "taskviewer.no_output": "[no output captured]",
1858
+ "taskviewer.key_line": "line",
1859
+ "taskviewer.key_page": "page",
1860
+ "taskviewer.key_top_bottom": "top/bot",
1861
+ "approvalpreview.key_line": "line",
1862
+ "approvalpreview.key_page": "page",
1863
+ "approvalpreview.key_top_bottom": "top/bot",
1864
+ "approvalpreview.key_back": "back",
1865
+ "apikey.footer": "Enter submit · Esc cancel",
1866
+ "apikey.title": "Enter API key for {name}",
1867
+ "apikey.subtitle": "Your key will be saved to ~/.scream-code/config.toml",
1868
+ "apikey.empty_hint": "API key cannot be empty.",
1869
+ "planbox.title_prefix": " Plan: ",
1870
+ "planbox.title_fallback": " Plan ",
1871
+ "planbox.more_lines": "...({count} more lines, press ctrl+e to expand)",
1872
+ "skillact.user_trigger": "(user triggered)",
1873
+ "skillact.model_trigger": "(model invoked)",
1874
+ "skillact.nested_trigger": "(nested call)",
1875
+ "skillact.activated": "▶ Activated skill: ",
1876
+ "mediaurl.audio": "Audio",
1877
+ "mediaurl.image": "Image",
1878
+ "mediaurl.video": "Video",
1879
+ "transcript.attachments": "{count} attachment(s)",
1880
+ "transcript.assistant": "Assistant: ",
1881
+ "transcript.thinking": "Thinking: ",
1882
+ "transcript.tool_name": "Tool {name}: ",
1883
+ "transcript.activated_skill": "Activated skill: {name}",
1884
+ "transcript.more_history": "↑ {count} more history message(s)",
1885
+ "compaction.done": "Compaction complete",
1886
+ "compaction.canceled": "Compaction cancelled",
1887
+ "compaction.in_progress": "Compacting context...",
1888
+ "planmode.plan": "Plan mode",
1889
+ "planmode.fusionplan": "Fusion plan mode",
1890
+ "todo.title": " Todo",
1891
+ "todo.more_items": " … {count} more item(s)",
1892
+ "textinput.footer": "Enter submit · Esc cancel",
1893
+ "textinput.empty_hint": "Input cannot be empty.",
1894
+ "editor.auto_detect": "Auto detect ($VISUAL / $EDITOR)",
1895
+ "editor.select_title": "Select external editor",
1896
+ "editorkey.cancel_compaction_failed": "Cancel compaction failed: {msg}",
1897
+ "editorkey.editor_not_configured": "Editor not configured. Set $VISUAL / $EDITOR, or run /editor <command>.",
1898
+ "editorkey.external_editor_failed": "External editor failed: {msg}",
1899
+ "streamingui.turn_complete_title": "Scream Code task complete",
1900
+ "streamingui.compacting": "Compacting context",
1901
+ "tc.approved_session": "Approved (this session)",
1902
+ "tc.approved": "Approved",
1903
+ "tc.rejected": "Rejected",
1904
+ "tc.cancelled": "Cancelled",
1905
+ "tc.error_prefix": "Error: ",
1906
+ "dialog.cc_session_connected": "Connected to CC session ({id}).",
1907
+ "dialog.create_session_failed": "Failed to create session",
1908
+ "dialog.cc_managed": "CC session managed by cc-connect. Please operate from the chat channel.",
1909
+ "dialog.memo_injected": "Injected memo #{id}",
1910
+ "dialog.approval_title": "Scream Code requires approval",
1911
+ "dialog.question_title": "Scream Code needs your answer",
1912
+ "bgagent.started_bg": "{subject} started in background",
1913
+ "bgagent.completed_bg": "{subject} completed in background",
1914
+ "bgagent.failed_bg": "{subject} failed in background",
1915
+ "tmux.extended_keys_off": "tmux extended-keys is off. Modified Enter key may not work correctly. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.",
1916
+ "tmux.extended_keys_format_xterm": "tmux extended-keys-format is xterm. Scream Code works best in csi-u mode. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.",
1917
+ "hookresult.blocked": " blocked",
1918
+ "hookresult.empty": "(empty)",
1919
+ "anomaly.rapid_refire": "Auto-compaction re-triggered {elapsed}s after previous compaction ended.",
1920
+ "anomaly.first_step_blowup": "Context reached {pct}% at first auto-compaction — possibly a giant file read or oversized initial prompt.",
1921
+ "replayhook.blocked": " blocked",
1922
+ "replayhook.empty": "(empty)",
1923
+ "cronmsg.missed_reminder": "Missed reminder",
1924
+ "cronmsg.reminder_fired": "Reminder fired",
1925
+ "cronmsg.one_time": "One-time",
1926
+ "cronmsg.coalesced": "{count} coalesced fire(s)",
1927
+ "cronmsg.missed": "{count} missed",
1928
+ "cronmsg.final_delivery": "Final delivery",
1929
+ "thinking.in_progress": "Thinking...",
1930
+ "shell.more_lines": "...({count} more lines, press ctrl+o to expand)",
1931
+ "ccconnect.note_botfather": "Create a bot at @BotFather first",
1932
+ "ccconnect.note_napcat": "Requires NapCat/OneBot",
1933
+ "ccconnect.note_wecom": "Requires public IP",
1934
+ "ccconnect.config_comment_attachment": "# Global: allow/disallow image & file backhaul to chat (on = enabled, off = disabled)",
1935
+ "ccconnect.reconfigured": "{name} already configured (config preserved)",
1936
+ "ccconnect.config_path": "Config file: {path}",
1937
+ "ccconnect.config_done": "✔ {name} channel configured",
1938
+ "ccconnect.config_written": "Config file written: {path}",
1939
+ "ccconnect.quick_ref": "📋 Common management commands (recommended to save):",
1940
+ "ccconnect.pm2_status": " pm2 status Check status (online = OK)",
1941
+ "ccconnect.pm2_restart": " pm2 restart cc-connect Restart service",
1942
+ "ccconnect.pm2_stop": " pm2 stop cc-connect Stop service",
1943
+ "ccconnect.pm2_logs": " pm2 logs cc-connect View logs",
1944
+ "ccconnect.pm2_delete": " pm2 delete cc-connect Fully delete",
1945
+ "ccconnect.reconfigure_warning": " ⚠ Do not run /cc-connect again with the same platform, or existing config will be overwritten!",
1946
+ "ccconnect.reconfigure_change": " To switch platforms, delete C:\\Users\\<username>\\.cc-connect\\config.toml first",
1947
+ "ccconnect.init_steps": "📋 Initialization steps (first-time setup only, follow in order):",
1948
+ "ccconnect.step_platform_auth": " Step 1: Platform auth{note}",
1949
+ "ccconnect.once_tag": "(one-time)",
1950
+ "ccconnect.step_n": " Step {num}: {label}{once}",
1951
+ "ccconnect.auto_done": " ✅ Auto-completed, no manual action needed ({command})",
1952
+ "ccconnect.more_commands": "More commands ({method}):",
1953
+ "ccconnect.attachment_hint": "💡 Enable attachment backhaul (let Agent send images & files):",
1954
+ "ccconnect.bind_setup": " Send /bind setup in chat",
1955
+ "ccconnect.autostart_hint": "💡 Auto-start on boot via cc-connect-startup.bat in Startup folder.",
1956
+ "ccconnect.manual_restart": " To manually restart service: pm2 resurrect",
1957
+ "ccconnect.not_installed": "cc-connect not installed",
1958
+ "ccconnect.install_guide": "Run in terminal first:\n\n npm install -g cc-connect\n\nAfter installation, run /cc-connect again to configure.",
1959
+ "ccconnect.already_configured": "{name} ✔ Configured",
1960
+ "ccconnect.picker_title": "cc-connect Quick Channel Setup",
1961
+ "ccconnect.picker_hint": "Select a platform to connect; config will be auto-written to ~/.cc-connect/config.toml",
1962
+ "market.gsap_name": "GSAP Animation Skill Pack",
1963
+ "market.gsap_desc": "Complete GreenSock Animation Platform reference, incl. core API, Timeline, ScrollTrigger, plugins, React integration — 8 skills",
1964
+ "market.design_card_name": "Claude Design Card",
1965
+ "market.design_card_desc": "14 design card generators (cover/photo/social/long-form), Parchment × Swiss dual-style system",
1966
+ "market.superpowers_name": "Superpowers Dev Skill Pack",
1967
+ "market.superpowers_desc": "14 dev methodology skills: TDD, system debugging, code review, subagent-driven dev, parallel agents, brainstorming, etc.",
1968
+ "market.scrapling_name": "Scrapling Web Scraper",
1969
+ "market.scrapling_desc": "Smart scraper based on Scrapling, supports Cloudflare/WAF bypass, login sessions, auto-extraction",
1970
+ "market.astock_name": "A-Share Data Analysis",
1971
+ "market.astock_desc": "A-share market data query & analysis, 27 APIs covering quotes/reports/capital flow/news/fundamentals, 4 built-in research workflows",
1972
+ "market.humanizer_name": "Humanizer AI Text De-AI",
1973
+ "market.humanizer_desc": "Remove AI writing traces: 30 AI pattern detection × 5 categories × voice calibration, output pure human style",
1974
+ "market.patent_name": "Patent Disclosure Skill",
1975
+ "market.patent_desc": "Auto-generate patent disclosures: patent point mining → CNIPA novelty search → desensitized write-up → self-check loop, Mermaid diagrams, .docx output",
1976
+ "market.contract_name": "Contract Review Pro",
1977
+ "market.contract_desc": "Professional contract review: 7-step workflow × 5 mandatory gates × 15 risk tags × 6-dimension assessment, annotated contract + legal opinion + analysis memo, 30 contract types",
1978
+ "market.academic_name": "Academic Research Skills",
1979
+ "market.academic_desc": "Full academic research pipeline: deep research (13-agent team × 7 modes) + academic writing (12-agent pipeline) + peer review (7-agent multi-perspective), end-to-end",
1980
+ "market.headroom_name": "Headroom Compression Optimizer",
1981
+ "market.headroom_desc": "Compress tool output, logs, files & RAG chunks before sending to LLM, save 60-95% tokens, answer quality preserved",
1982
+ "market.xiaohu_wechat_name": "Xiaohu WeChat Formatter",
1983
+ "market.xiaohu_wechat_desc": "Markdown → WeChat-compatible HTML → push to draft box, 30 themes + visual gallery, one-click formatting & publishing",
1984
+ "market.huashu_name": "Huashu Design",
1985
+ "market.huashu_desc": "Native HTML design skill: hi-fi prototypes / slides / animations + 20 design philosophies + 5-dim review + MP4 export",
1986
+ "market.html_video_name": "HTML Video Generator",
1987
+ "market.html_video_desc": "HTML to MP4: pluggable render engine + 21 templates + AI scoring, fully local, zero render cost",
1988
+ "market.xiaohu_translate_name": "Xiaohu Video Translator",
1989
+ "market.xiaohu_translate_desc": "Auto Chinese subtitles for foreign videos: download / transcribe / translate / polish / burn-in, fully local",
1990
+ "market.videocut_name": "Video Editing Agent",
1991
+ "market.videocut_desc": "Claude Code Skills-driven video editing agent: talking-head cuts / subtitle import / quality upscaling",
1992
+ "market.taste_name": "Taste Skill Design Taste",
1993
+ "market.taste_desc": "Give AI good taste: prevent boring generic designs, output quality solutions",
1994
+ "market.vtake_name": "VTake Video Editing",
1995
+ "market.vtake_desc": "Agent Skills-driven video editing tool",
1996
+ "market.remotion_name": "Remotion Video Skill",
1997
+ "market.remotion_desc": "Remotion (React video framework) official skill pack",
1998
+ "market.html_anything_name": "HTML Anything All-in-One Design",
1999
+ "market.html_anything_desc": "75 skills × 9 scenarios: magazine / slides / poster / Xiaohongshu / data report / prototype, zero API keys",
2000
+ "market.guizang_name": "Guizang Social Card",
2001
+ "market.guizang_desc": "Xiaohongshu carousel + WeChat cover: 28 layouts × 10 themes, Editorial × Swiss visual system, single-file HTML → PNG",
2002
+ "prompts.logout_title": "Select provider to log out",
2003
+ "prompts.no_wire_provider": "No providers supporting this wire type in the catalog.",
2004
+ "prompts.select_provider": "Select provider",
2005
+ "prompts.wire_openai": "OpenAI compatible protocol",
2006
+ "prompts.wire_openai_desc": "For DeepSeek, OpenAI, Groq, etc.",
2007
+ "prompts.wire_anthropic": "Anthropic protocol",
2008
+ "prompts.wire_anthropic_desc": "For Claude series models",
2009
+ "prompts.thinking_off": "Thinking off",
2010
+ "prompts.thinking_low": "Low thinking",
2011
+ "prompts.thinking_medium": "Medium thinking",
2012
+ "prompts.thinking_high": "High thinking",
2013
+ "prompts.image_off": "Image off",
2014
+ "prompts.image_off_desc": "Select this when the model does not support image input",
2015
+ "prompts.image_on": "Image on",
2016
+ "prompts.image_on_desc": "Enable when model supports image input, allows sending images",
2017
+ "prompts.video_off": "Video off",
2018
+ "prompts.video_off_desc": "Select this when the model does not support video input",
2019
+ "prompts.video_on": "Video on",
2020
+ "prompts.video_on_desc": "Enable when model supports video input, allows sending videos",
2021
+ "prompts.audio_off": "Audio off",
2022
+ "prompts.audio_off_desc": "Select this when the model does not support audio input",
2023
+ "prompts.audio_on": "Audio on",
2024
+ "prompts.audio_on_desc": "Enable when model supports audio input, allows sending audio",
2025
+ "prompts.wire_type_title": "Select compatible protocol",
2026
+ "prompts.wire_type_hint": "Select the model provider's API protocol type",
2027
+ "prompts.thinking_title": "Thinking mode",
2028
+ "prompts.thinking_hint": "Select thinking intensity (requires model support)",
2029
+ "prompts.image_title": "Multimodal config · Image input",
2030
+ "prompts.video_title": "Multimodal config · Video input",
2031
+ "prompts.audio_title": "Multimodal config · Audio input",
2032
+ "prompts.modal_off_hint": "Select off if model does not support it",
2033
+ "info.mcp_load_failed": "Failed to load MCP server: {msg}",
2034
+ "config.plan_cleared": "Plan cleared",
2035
+ "config.yolo_already_on": "YES mode is already on",
2036
+ "config.yolo_on": "YES mode: on",
2037
+ "config.yolo_on_desc": "Workspace tools auto-approved.",
2038
+ "config.yolo_already_off": "YES mode is already off",
2039
+ "config.yolo_off": "YES mode: off",
2040
+ "config.yolo_toggle_on": "YES mode: on",
2041
+ "config.yolo_toggle_on_desc": "Workspace tools have been auto-approved.",
2042
+ "config.auto_already_on": "Auto mode is already on",
2043
+ "config.auto_on": "Auto mode: on",
2044
+ "config.auto_on_desc": "Tools auto-approved. Agent will not ask questions.",
2045
+ "config.auto_already_off": "Auto mode is already off",
2046
+ "config.auto_off": "Auto mode: off",
2047
+ "config.auto_toggle_on": "Auto mode: on",
2048
+ "config.auto_toggle_on_desc": "Tools auto-approved. Agent will not ask questions.",
2049
+ "settings.title": "Settings",
2050
+ "settings.model": "Model",
2051
+ "settings.model_desc": "Switch current model and thinking mode.",
2052
+ "settings.language": "Language",
2053
+ "settings.language_desc": "Switch interface language",
2054
+ "settings.permission": "Permission",
2055
+ "settings.permission_desc": "Choose how tool actions are approved.",
2056
+ "settings.theme": "Theme",
2057
+ "settings.theme_desc": "Change terminal UI theme.",
2058
+ "settings.editor": "Editor",
2059
+ "settings.editor_desc": "Set external editor command.",
2060
+ "settings.usage": "Usage",
2061
+ "settings.usage_desc": "Show session tokens, context window, and plan quota.",
2062
+ "dispatch.session_picker_failed": "Failed to open session picker: {error}",
2063
+ "dispatch.tasks_browser_failed": "Failed to open tasks browser: {error}",
2064
+ "dispatch.usage_failed": "Failed to show usage: {error}",
2065
+ "dispatch.status_failed": "Failed to show status report: {error}",
2066
+ "constant.llm_not_set": "LLM not set, run /config to configure model",
2067
+ "constant.no_active_session": "No active session. Run /config to configure model.",
2068
+ "constant.ctrl_d_hint": "Press Ctrl+D again to exit",
2069
+ "constant.ctrl_c_hint": "Press Ctrl+C again to exit",
2070
+ "tui.resume_warning": "Warning: {warning}",
2071
+ "tui.organizing_memory": "Organizing session memory...",
2072
+ "tui.skill_failed": "Skill \"{skill}\" failed: {message}",
2073
+ "tui.replay_no_new_session": "Cannot start a new session during history replay.",
2074
+ "adapter.task_label": "Task {taskId}",
2075
+ "knowledge.path_placeholder": "/path/to/doc.md or /path/to/docs",
2076
+ "knowledge.ingest_summary": "Total: {chunks} chunks, {events} events, {entities} entities",
2077
+ "knowledge.empty_store": "Knowledge base is empty, please ingest documents with /knowledge first",
2078
+ "knowledge.web_opened": "Knowledge graph opened: {url}",
2079
+ "cc.clean_config.detail": " ~/.cc-connect (includes session records, config, logs)",
2080
+ "registry.auto_desc": "Toggle auto permission mode",
2081
+ "registry.yolo_desc": "Toggle auto-approve mode (yolo)",
2082
+ "registry.wolfpack_desc": "Toggle wolfpack mode, auto-approve + batch concurrency",
2083
+ "registry.sessions_desc": "Browse and restore sessions",
2084
+ "registry.goal_desc": "View/manage auto goals",
2085
+ "registry.memory_desc": "Browse, search, inject memory memos",
2086
+ "registry.knowledge_desc": "Manage local knowledge base (ingest/search/delete/stats)",
2087
+ "registry.new_desc": "Start a new session in the current workspace",
2088
+ "registry.model_desc": "Switch LLM model",
2089
+ "mcp.desktop_desc": "macOS desktop automation: screenshot/click/type/scroll/window management (Background delivery, no focus needed)",
2090
+ "mcp.browser_desc": "Browser automation: 46 tools, supports navigation/click/fill/screenshot/performance/memory debugging/extension management",
2091
+ "kw.title": "Scream Knowledge Graph",
2092
+ "kw.entity": "Entities",
2093
+ "kw.event": "Events",
2094
+ "kw.relation": "Relations",
2095
+ "kw.search_placeholder": "Search...",
2096
+ "kw.btn_reset": "Reset",
2097
+ "kw.btn_expand": "All",
2098
+ "registry.compact_desc": "Compact conversation context",
2099
+ "registry.make_skill_desc": "Distill workflow from current session into a Skill",
2100
+ "registry.plan_desc": "Toggle plan mode",
2101
+ "registry.fusionplan_desc": "Toggle fusion plan mode (multi-agent parallel planning)",
2102
+ "registry.tasks_desc": "Browse background tasks",
2103
+ "registry.help_desc": "Show available commands and shortcuts",
2104
+ "registry.status_desc": "Show current session and runtime status",
2105
+ "registry.usage_desc": "Show token usage and context window",
2106
+ "registry.btw_desc": "Quick question without interrupting conversation",
2107
+ "registry.like_desc": "Set your preferences (nickname, tone, other)",
2108
+ "registry.mcp_desc": "Manage MCP servers (install/disable/uninstall)",
2109
+ "registry.skill_desc": "Skill center, manage Skills including activate, install, uninstall",
2110
+ "registry.cc_desc": "Control your cc (start/stop/restart)",
2111
+ "registry.cc_connect_desc": "cc-connect quick channel setup (requires installation)",
2112
+ "registry.revoke_desc": "Undo last conversation round (specify rounds, e.g. /revoke 3)",
2113
+ "registry.fork_desc": "Copy current session and start a new branch",
2114
+ "registry.title_desc": "Set or show session title",
2115
+ "registry.config_desc": "Browse and configure models (fetch latest directory remotely)",
2116
+ "registry.permission_desc": "Select permission mode",
2117
+ "registry.theme_desc": "Set terminal UI theme",
2118
+ "registry.language_desc": "Switch interface language",
2119
+ "registry.editor_desc": "Set external editor",
2120
+ "registry.settings_desc": "Open TUI settings",
2121
+ "registry.init_desc": "Analyze codebase and generate AGENTS.md",
2122
+ "registry.export_md_desc": "Export current session as Markdown",
2123
+ "registry.export_debug_desc": "Export current session as debug ZIP archive",
2124
+ "registry.update_desc": "Manually update Scream Code to latest version",
2125
+ "registry.version_desc": "Show version info",
2126
+ "registry.logout_desc": "Remove configured models",
2127
+ "registry.exit_desc": "Exit application",
2128
+ "kw.hint_drag": "Drag to pan · Scroll to zoom · Click to expand/collapse · Double-click for details",
2129
+ "kw.detail_name": "Name",
2130
+ "kw.detail_type": "Type",
2131
+ "kw.detail_category": "Category",
2132
+ "kw.detail_weight": "Weight",
2133
+ "kw.detail_description": "Description",
2134
+ "kw.detail_keywords": "Keywords",
2135
+ "kw.detail_related": "Related",
2136
+ "kw.btn_collapse": "Collapse",
2137
+ "kw.btn_expand_all": "Expand All",
2138
+ "kw.btn_collapse_all": "Collapse All",
2139
+ "kw.loading": "Loading",
2140
+ "kw.loading_timeout": "Data did not return within 8 seconds, please check the terminal",
2141
+ "kw.no_data": "Failed to load",
2142
+ "kw.no_data_hint": "Please ingest documents with /knowledge first",
2143
+ "kw.no_results": "No matching results",
2144
+ "kw.back": "Back",
2145
+ "kw.root_label": "Root",
2146
+ "kw.close": "Close",
2147
+ "tui.invalid_config": "Invalid TUI config in ~/.scream-code/tui.toml; using defaults.",
2148
+ "goal.storm_breaker": "Storm Breaker",
2149
+ "goalpanel.goal_placeholder": "<goal description>",
2150
+ "wolfpack.on": "WolfPack mode: on",
2151
+ "wolfpack.on_desc": "Batch concurrent agents activated.",
2152
+ "wolfpack.off": "WolfPack mode: off",
2153
+ "badge.plan": "Plan",
2154
+ "badge.fusion": "Fusion",
2155
+ "badge.wolfpack": "Wolfpack",
2156
+ "badge.goal": "Goal",
2157
+ "badge.auto": "Auto",
2158
+ "badge.yes": "YES",
2159
+ "kw.lang_toggle": "中文",
2160
+ "kw.embedding_downloading": "Vector model downloading…",
2161
+ "kw.embedding_failed": "Vector model load failed. Return to the menu and select Download to retry.",
2162
+ "kw.embedding_ready": "Vector model ready",
2163
+ "kw.embedding_not_downloaded": "Vector model not downloaded (select Download vector model)",
2164
+ "kw.embedding_already_installed": "Vector model already installed, no need to re-download"
2165
+ }
2166
+ };
2167
+ function detectSystemLocale() {
2168
+ const env = process.env;
2169
+ const envLang = (env["LC_ALL"] || env["LC_MESSAGES"] || env["LANG"] || env["LANGUAGE"] || "").toLowerCase();
2170
+ if (envLang.startsWith("zh")) return "zh";
2171
+ if (envLang.length > 0) return "en";
2172
+ try {
2173
+ if (Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase().startsWith("zh")) return "zh";
2174
+ } catch {}
2175
+ if (process.platform === "win32") {
2176
+ if ((env["LANG"] || "").toLowerCase().startsWith("zh")) return "zh";
2177
+ }
2178
+ return "en";
2179
+ }
2180
+ let currentLocale = detectSystemLocale();
2181
+ function getLocale() {
2182
+ return currentLocale;
2183
+ }
2184
+ function setLocale(locale) {
2185
+ if (dictionaries[locale]) currentLocale = locale;
2186
+ }
2187
+ function t(key, params) {
2188
+ let text = dictionaries[currentLocale][key] ?? dictionaries.zh[key] ?? key;
2189
+ if (params) for (const [k, v] of Object.entries(params)) text = text.replaceAll(`{${k}}`, String(v));
2190
+ return text;
2191
+ }
2192
+ //#endregion
2193
+ //#region src/tui/components/dialogs/text-input-dialog.ts
2194
+ function getFooter() {
2195
+ return t("textinput.footer");
2196
+ }
2197
+ function maskText(text) {
2198
+ return text.split(/((?:\[[0-9;]*m|_pi:c))/).map((part, i) => i % 2 === 1 ? part : part.replaceAll(/./g, "•")).join("");
2199
+ }
2200
+ var TextInputDialogComponent = class extends Container {
2201
+ focused = false;
2202
+ input;
2203
+ onDone;
2204
+ opts;
2205
+ done = false;
2206
+ emptyHinted = false;
2207
+ constructor(onDone, opts) {
2208
+ super();
2209
+ this.onDone = onDone;
2210
+ this.opts = opts;
2211
+ this.input = new Input();
2212
+ if (opts.initialValue !== void 0) this.input.setValue(opts.initialValue);
2213
+ this.input.onSubmit = (value) => {
2214
+ this.submit(value);
2215
+ };
2216
+ }
2217
+ handleInput(data) {
2218
+ if (this.done) return;
2219
+ if (matchesKey(data, Key.escape) || matchesKey(data, Key.ctrl("c")) || matchesKey(data, Key.ctrl("d"))) {
2220
+ this.cancel();
2221
+ return;
2222
+ }
2223
+ if (this.emptyHinted) this.emptyHinted = false;
2224
+ this.input.handleInput(data);
2225
+ }
2226
+ invalidate() {
2227
+ super.invalidate();
2228
+ this.input.invalidate();
2229
+ }
2230
+ render(width) {
2231
+ this.input.focused = this.focused && !this.done;
2232
+ const safeWidth = Math.max(28, width);
2233
+ const innerWidth = Math.max(10, safeWidth - 4);
2234
+ const pad = " ";
2235
+ const border = (s) => chalk.hex(this.opts.colors.primary)(s);
2236
+ const titleLine = truncateToWidth(chalk.bold.hex(this.opts.colors.textStrong)(this.opts.title), innerWidth, "…");
2237
+ const subtitleText = this.emptyHinted ? t("textinput.empty_hint") : this.opts.subtitle ?? "";
2238
+ const subtitleLine = truncateToWidth(chalk.hex(this.opts.colors.textDim)(subtitleText), innerWidth, "…");
2239
+ const footerLine = truncateToWidth(chalk.hex(this.opts.colors.textDim)(getFooter()), innerWidth, "…");
2240
+ const rawInputLine = this.input.render(innerWidth)[0] ?? "> ";
2241
+ const contentLines = [
2242
+ titleLine,
2243
+ "",
2244
+ subtitleLine,
2245
+ "",
2246
+ this.opts.masked && this.input.getValue() !== "" ? maskText(rawInputLine) : rawInputLine,
2247
+ "",
2248
+ footerLine
2249
+ ];
2250
+ const lines = [
2251
+ "",
2252
+ border("╭" + "─".repeat(safeWidth - 2) + "╮"),
2253
+ border("│") + " ".repeat(safeWidth - 2) + border("│")
2254
+ ];
2255
+ for (const content of contentLines) {
2256
+ const vis = visibleWidth(content);
2257
+ const rightPad = Math.max(0, innerWidth - vis);
2258
+ lines.push(border("│") + pad + content + " ".repeat(rightPad) + border("│"));
2259
+ }
2260
+ lines.push(border("│") + " ".repeat(safeWidth - 2) + border("│"));
2261
+ lines.push(border("╰" + "─".repeat(safeWidth - 2) + "╯"));
2262
+ lines.push("");
2263
+ return lines;
2264
+ }
2265
+ submit(value) {
2266
+ if (this.done) return;
2267
+ const trimmed = value.trim();
2268
+ if (trimmed.length === 0 && !this.opts.allowEmpty) {
2269
+ this.emptyHinted = true;
2270
+ return;
2271
+ }
2272
+ this.done = true;
2273
+ this.onDone({
2274
+ kind: "ok",
2275
+ value: trimmed
2276
+ });
2277
+ }
2278
+ cancel() {
2279
+ if (this.done) return;
2280
+ this.done = true;
2281
+ this.onDone({ kind: "cancel" });
2282
+ }
2283
+ };
2284
+ //#endregion
2285
+ export { setLocale as a, getLocale as i, assertScreamHostIdentity as n, t as o, createScreamDefaultHeaders as r, TextInputDialogComponent as t };