deel-local-cli 1.10.0 → 1.13.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.
Files changed (55) hide show
  1. package/README.ko.md +1167 -1166
  2. package/README.md +1224 -1223
  3. package/bin/deel.js +1 -1
  4. package/package.json +2 -2
  5. package/src/acp/map.js +367 -362
  6. package/src/acp/serve.js +810 -769
  7. package/src/agent/budget.js +156 -153
  8. package/src/agent/commit.js +534 -511
  9. package/src/agent/compact.js +158 -31
  10. package/src/agent/effort.js +308 -197
  11. package/src/agent/evolve.js +263 -213
  12. package/src/agent/filemem.js +16 -2
  13. package/src/agent/loop.js +1728 -1516
  14. package/src/agent/memory.js +156 -152
  15. package/src/agent/mention.js +210 -210
  16. package/src/agent/recall.js +222 -209
  17. package/src/agent/session.js +1056 -948
  18. package/src/backend/adapter.js +1355 -798
  19. package/src/backend/cachemark.js +223 -0
  20. package/src/backend/detect.js +327 -288
  21. package/src/backend/http.js +460 -458
  22. package/src/backend/mcp.js +407 -395
  23. package/src/backend/price.js +260 -197
  24. package/src/backend/probe.js +487 -473
  25. package/src/backend/quota.js +274 -157
  26. package/src/backend/retry.js +30 -6
  27. package/src/backend/tokens.js +59 -0
  28. package/src/backend/toolfit.js +352 -325
  29. package/src/backend/wire.js +715 -0
  30. package/src/commands.js +3184 -2998
  31. package/src/config.js +283 -244
  32. package/src/i18n/en.js +545 -520
  33. package/src/i18n/ja.js +498 -473
  34. package/src/i18n/ko.js +592 -567
  35. package/src/i18n/zh.js +498 -473
  36. package/src/oneshot.js +625 -549
  37. package/src/pack/tar.js +154 -132
  38. package/src/pack/zip.js +235 -217
  39. package/src/plugins/manage.js +416 -336
  40. package/src/providers/bedrock.js +17 -0
  41. package/src/repl.js +2616 -2515
  42. package/src/safety/audit.js +148 -129
  43. package/src/safety/guard.js +641 -526
  44. package/src/safety/network.js +200 -157
  45. package/src/tools/fastgrep.js +229 -214
  46. package/src/tools/fsutil.js +291 -250
  47. package/src/tools/index.js +2560 -2523
  48. package/src/tools/jobs.js +876 -795
  49. package/src/tools/label.js +52 -0
  50. package/src/tools/spawn.js +213 -99
  51. package/src/tools/verify.js +358 -357
  52. package/src/tools/webfetch.js +418 -393
  53. package/src/ui/export.js +233 -217
  54. package/src/ui/pick.js +115 -115
  55. package/src/ui/status.js +617 -610
package/src/i18n/zh.js CHANGED
@@ -1,473 +1,498 @@
1
- /**
2
- * 屏幕文字 — 简体中文.
3
- *
4
- * 코드는 한국어 그대로다. 여기서 바꾸는 것은 **화면에 나가는 말**뿐이다.
5
- * 자리 이름({이름}·{n} 같은 것)은 코드가 그 이름으로 값을 넣으므로
6
- * **한 글자도 바꾸면 안 된다.** 바꾸면 그 자리가 중괄호째 화면에 찍힌다.
7
- *
8
- * 안 옮긴 열쇠는 영어 → 한국어 순으로 받친다(i18n/index.js). 빈칸은 안 낸다.
9
- */
10
- export const zh = {
11
- 'cmd.help.desc': '列出命令',
12
- 'cmd.clear.desc': '清空对话',
13
- 'cmd.context.desc': '查看上下文用量',
14
- 'cmd.ctx.desc': '上下文长度 — 为这个模型重新测量,或自己指定',
15
- 'cmd.ctx.arg': '[auto|数字|640k]',
16
- 'cmd.out.desc': '单次回复上限 — 大文件被截断时调高',
17
- 'cmd.out.arg': '[数字|32k|auto]',
18
- 'cmd.grade.desc': '模型等级 — 能独立做到哪一步。与窗口大小不是同一件事',
19
- 'cmd.grade.arg': '[small|medium|large|auto]',
20
- 'cmd.compact.desc': '折叠较早的对话',
21
- 'cmd.model.desc': '切换连接与模型 · `card` 显示这个模型在这里做过什么',
22
- 'cmd.model.arg': '[名称|list|models|card]',
23
- 'cmd.think.desc': '推理力度 (off/low/medium/high/max)',
24
- 'cmd.think.arg': '<级别>',
25
-
26
- // ── /think 画面 ─────────────────────────────────────────────────────
27
- // 只译表格的框、不译里面的内容(阶段名),就等于什么都读不懂。
28
- // 阶段名·分配名在 agent/effort.js 里 — 和 modes.js 一样的做法。
29
- 'run.noTools': '尚未确认工具调用 — 请用 deel diagnose 检查',
30
- 'think.effort': '推理力度',
31
- 'think.profile': '分配',
32
- 'think.detail': '详细',
33
- 'think.harder': '更用力',
34
- 'think.faster': '更快',
35
- 'think.eg': '例',
36
- 'think.col.stage': '阶段',
37
- 'think.col.level': '力度',
38
- 'think.col.cap': '输出上限',
39
- 'think.col.when': '何时',
40
- 'think.cap.head': '输出上限在',
41
- 'think.cap.tail': ' 之内分配 —',
42
- 'think.cap.you': '(您自己定的值)',
43
- 'think.cap.server': '(从服务器读到的值)',
44
- 'think.cap.guess': '(不知道,所以用默认值)',
45
- 'think.ctx': '上下文',
46
- 'think.ctx.used': ' · 已用 ',
47
- 'think.nomodel': '这个连接不会在模型那一层调节推理力度。',
48
- 'think.nomodel.note': '只有各阶段的输出上限会生效。',
49
-
50
- 'cmd.mode.desc': '批准策略 — 先问到什么程度 (auto/confirm/strict)',
51
- 'cmd.mode.arg': '<模式>',
52
- 'cmd.work.desc': '工作模式 — 这是哪一类活儿 (auto 会替你选)',
53
- 'cmd.work.arg': '[模式]',
54
- 'cmd.auto.desc': '工作模式 → auto (随请求自动切换。与 /mode 不同)',
55
- 'cmd.code.desc': '工作模式 → code (动手改和搭)',
56
- 'cmd.plan.desc': '工作模式 → plan (先规划,不改文件)',
57
- 'cmd.architect.desc': '工作模式 → architect (定结构)',
58
- 'cmd.debug.desc': '工作模式 → debug (找原因)',
59
- 'cmd.ask.desc': '工作模式 → ask (只解释)',
60
- 'cmd.orchestrator.desc': '工作模式 → orchestrator (把大活儿拆开)',
61
- 'cmd.undo.desc': '撤销上一轮 — 文件和对话一起',
62
- 'cmd.undo.arg': '[轮数]',
63
- 'cmd.diff.desc': '本次对话改动的文件,以及改了什么',
64
- 'cmd.diff.arg': '[文件]',
65
- 'cmd.preview.desc': '就地把做好的东西跑起来 — 不用部署',
66
- 'cmd.preview.arg': '[文件夹|off]',
67
- 'cmd.tools.desc': '查看可用的工具',
68
- 'cmd.skills.desc': '浏览、搜索、加载技能',
69
- 'cmd.skills.arg': '[search|all|off]',
70
- 'cmd.plugin.desc': '插件 — 列出、安装、删除、打包供离线导入',
71
- 'cmd.plugin.arg': '[install|remove|pack]',
72
- 'cmd.cost.desc': '本次对话的用量',
73
- 'cmd.status.desc': '连接状态',
74
- 'cmd.scan.desc': '扫描本机上的本地模型服务',
75
- 'cmd.scan.arg': '[save]',
76
- 'cmd.thread.desc': '话题分支 — 岔开一条路。连接和撤销记录仍然共用',
77
- 'cmd.thread.arg': '[new|fork|close|编号|名称]',
78
- 'cmd.learned.desc': 'deel 自己攒下的东西 — 这里能用的命令、这个模型的习惯',
79
- 'cmd.learned.arg': '[clear]',
80
- 'cmd.pin.desc': '钉住一行 — 折叠和摘要都不会把它弄丢',
81
- 'cmd.pin.arg': '[文字|clear 编号|clear all]',
82
- 'cmd.evidence.desc': '证据 — 改了什么,什么能证明它。没有依据的也照说',
83
- 'cmd.evidence.arg': '[文件]',
84
- 'cmd.commit.desc': '提交 — 只放入本次对话改的东西;说明由差异和证据生成',
85
- 'cmd.review.desc': '在新的上下文里再看一遍改动 — 只报告发现,什么都不改',
86
- 'cmd.paste.desc': '贴上剪贴板里的截图 (先截图,再 /paste)',
87
- 'cmd.commit.arg': '[all|preview|标题]',
88
- 'cmd.sessions.desc': '这个文件夹里留下的历史对话',
89
- 'cmd.recall.desc': '搜索历史对话 — 按内容找,不是按标题',
90
- 'cmd.recall.arg': '<文字>',
91
- 'cmd.mcp.desc': '已连接的 MCP 工具服务',
92
- 'cmd.memory.desc': '跨对话保留的东西 — 查看和清除',
93
- 'cmd.memory.arg': '[forget <n>|clear|<要记住的话>]',
94
- 'cmd.level.desc': '使用者级别 (新手/开发者)',
95
- 'cmd.level.arg': '[级别]',
96
- 'cmd.keys.desc': '按键看终端到底发出了什么 — 换行不管用的时候',
97
- 'cmd.bell.desc': '一轮结束或需要你回答时的提示音和窗口标题 (on/off)',
98
- 'cmd.bell.arg': '[on|off]',
99
- 'cmd.motion.desc': '干活时动的东西 — 骑士、动物、办公室',
100
- 'cmd.motion.arg': '[knight|animal|office|default|off]',
101
- 'cmd.lang.desc': '屏幕语言 — 한국어 / English / 日本語 / 中文',
102
- 'cmd.lang.arg': '[ko|en|ja|zh] [指令语言]',
103
- 'cmd.init.desc': '创建 DEEL.md 规则文件',
104
- 'cmd.exit.desc': '退出',
105
- 'cmd.quit.desc': '退出',
106
- 'cmd.consult.desc': '向另一个模型问一个问题 — 当前模型保持不动',
107
- 'cmd.consult.arg': '[配置 <问题>]',
108
- 'consult.title': '本机上配置好的模型',
109
- 'consult.noProfiles': '没有配置。请用 /scan 查找本地服务。',
110
- 'consult.current': '(使用中)',
111
- 'consult.usage': '用法: /consult <配置> <问题> 例: /consult small 这个正则在做什么',
112
- 'consult.questionOnly': '只发送问题 — 这段对话不会跟着过去。需要的背景请写进问题里。',
113
- 'consult.candidates': '匹配到的:',
114
- 'consult.have': '可用的:',
115
- 'consult.needQuestion': '请写下想问 {이름} 的内容。例: /consult {이름} 这个报错是什么意思',
116
- 'consult.goesOut': '— 这个问题会离开你的机器',
117
- 'consult.asking': '正在问 {모델}…',
118
- 'consult.system': '你是被另一个编程助手咨询的模型。请简短准确地回答。不知道就说不知道。这是在向你提问,不是让你改文件。',
119
- 'consult.failed': '问不成 — {왜}',
120
- 'consult.empty': '返回是空的。那个模型可能不带工具就不回答。',
121
- 'consult.added': '已把那个回答加进对话,并标明是谁说的。',
122
- 'probe.codexOnly': '{모델} 系列无法通过这个接口(/chat/completions)使用 — OpenAI 只通过 Responses API(/responses) 提供该系列,而 deel 还不会说那个接口。请暂时改选别的模型。',
123
- 'head.spec.ollama': 'Ollama 自有规格',
124
- 'head.spec.openai': 'OpenAI 兼容 API',
125
- 'head.spec.anthropic': 'Anthropic API',
126
- 'head.mode.default': '本机内(默认)',
127
- 'head.mode.online': '外部(online)',
128
- 'head.mode.offline': '封锁(offline)',
129
- 'head.model': '模型',
130
- 'head.tokens': '词元',
131
- 'head.grade': '等级',
132
- 'head.guess': '推测',
133
- 'head.send': '发往',
134
- 'head.inside': '本机内',
135
- 'head.outside': '外部',
136
- 'head.offlineLock': '[离线锁定]',
137
- 'head.viaProxy': '经代理 {프록시}',
138
- 'head.proxyBad': '[代理设置不可用 — 见 /status]',
139
- 'head.nowhereElse': '← 除此之外哪儿也不去',
140
- 'head.glyphHint': '状态栏开头的 {안} 表示这一点。有流量出去时会变成 {밖}。',
141
- 'head.conn': '连接',
142
- 'head.streaming': '流式',
143
- 'head.noStreaming': '非流式',
144
- 'head.tools': '工具',
145
- 'head.toolsUnknown': '工具未确认',
146
- 'head.thinkCtl': '推理力度可调',
147
- 'head.noThinkCtl': '推理力度不可调',
148
- 'head.folder': '文件夹',
149
- 'head.approve': '批准',
150
- 'head.shiftTab': 'Shift+Tab',
151
- 'head.shiftTabHint': ' 可切换 · ',
152
- 'head.tabHint': 'Tab 补全你正在输入的 / 命令',
153
- 'head.newlineHint': '换行: Alt+Enter (Mac 上是 Option+Enter) 在框内换行 · 若终端吞掉它,就在行尾加空格和 ` 再回车',
154
- 'head.star': '觉得这个工具好用?去 GitHub 点个 Star —',
155
- 'head.thisPC': '找到',
156
- 'head.skills': '技能 {n}',
157
- 'head.commands': '命令 {n}',
158
- 'head.plugins': '插件 {n}',
159
- 'grade.small': '小',
160
- 'grade.medium': '中',
161
- 'grade.large': '大',
162
- 'head.gradeSuffix': ' · {급} {급이름}{짐작}',
163
- 'seg.dir': '工作文件夹 (前面的 ⌂/↗ 表示你写的东西会去哪里)',
164
- 'seg.ver': '版本号',
165
- 'seg.thread': '分支',
166
- 'seg.model': '模型名',
167
- 'seg.grade': '模型等级 (能独立做到哪一步)',
168
- 'seg.ctx': '已用上下文 (刻度是折叠与摘要开始的位置)',
169
- 'seg.work': '工作模式',
170
- 'seg.think': '推理力度与分配',
171
- 'seg.mode': '批准策略',
172
- 'seg.edits': '本次对话改动的文件',
173
- 'seg.verify': '真正验证过的东西',
174
- 'seg.undoable': '还能撤销的轮数',
175
- 'seg.tok': '输入/输出词元',
176
- 'seg.cost': '已花费金额(仅在已知价格时)',
177
- 'seg.tools': '工具调用',
178
- 'seg.skills': '本机上找到的技能',
179
- 'seg.time': '开始以来的时间',
180
- 'intro.inside': '不离开本机',
181
- 'intro.outside': '会离开本机',
182
- 'undo.nothing': '没有可撤销的。',
183
- 'undo.done': '已撤销 {turns} 轮 · 恢复了 {files} 个文件。',
184
- 'undo.alsoTalk': '同时撤回了 {n} 条消息 — 如果模型还以为被撤销的代码在,它会继续往上搭。',
185
- 'undo.repaired': '(另外清理了 {n} 个悬空的工具调用)',
186
- 'undo.saidWas': '你当时说的是:',
187
- 'undo.failed': '有 {n} 个没能还原 — 那些文件还是改过的样子。备份留着,请再试一次 /undo。',
188
- 'undo.talkKept': '对话保持原样 — 那一轮早就被折叠了。',
189
- 'undo.talkKeptWhy': '模型可能仍以为撤销掉的工作还在,下一句里提一下。',
190
- 'bell.stateOn': '开',
191
- 'bell.stateOff': '关',
192
- 'bell.now': '提示音现在是{상태}。',
193
- 'bell.when': '一轮超过 {초} 秒时响一次,deel 需要你回答时也会响。',
194
- 'bell.title': '窗口标题也会显示状态 — 只看标签页就知道是不是还在干活。',
195
- 'bell.howto': '要修改',
196
- 'bell.notATty': '(现在不是终端,所以没有提示音也没有标题 — 那会弄坏管道。)',
197
- 'bell.needOnOff': '请说 on 或 off。',
198
- 'bell.turnedOn': '提示音已开。',
199
- 'bell.turnedOff': '提示音已关。',
200
- 'bell.justRang': '刚才响了一次。要是没听见,看看终端的响铃设置。',
201
- 'bell.appliesNow': '本次对话立即生效。',
202
- 'motion.now': '当前:',
203
- 'motion.plain': '一格的转圈。安静',
204
- 'motion.knight': '骑士挥剑。偶尔被压扁',
205
- 'motion.animal': '像素动物四处走动',
206
- 'motion.office': '输入框上方十二行办公室 — 把工作当成一个房间',
207
- 'motion.off': '什么都不画 (给读屏软件用户)',
208
- 'motion.set': '已换成 {것}。',
209
- 'motion.appliesNow': '下一帧起可见。也已写进配置。',
210
- 'motion.unknown': '"{값}" 不在其中。',
211
- 'motion.pickOne': '从这些里选一个:',
212
- 'motion.envWins': '设置了 DEEL_MOTION / DEEL_OFFICE,环境变量优先。',
213
- 'motion.tooSmall': '这个终端是 {줄} x {칸} — 办公室至少要 {최소줄} 行 {최소칸} 列。',
214
- 'motion.appleTerminal': 'macOS 的 Terminal 会拉开行距,房间里会出现横缝 — Terminal › 设置 › 描述文件 › 文本 › 字体「更改」› 把行距设为 1.0。(iTerm2 默认就是 1.0,所以那边看着正常)',
215
- 'lang.now': '屏幕语言是 {이름}。',
216
- 'lang.ko': '한국어 (韩语)',
217
- 'lang.en': 'English (英语)',
218
- 'lang.ja': '日本語 (日语)',
219
- 'lang.zh': '中文 (简体)',
220
- 'lang.howto': '要修改',
221
- 'lang.changed': '屏幕语言已改为 {이름}。',
222
- 'lang.unknown': '请指定 ko · en · ja · zh 之一。',
223
- 'lang.progress': '{언어}: 共 {전체} 条,已翻译 {옮김} 条。其余按英语或韩语显示。',
224
- 'lang.partial': '还没有全部译完 — 未翻译的行显示英语或韩语,不会留空。',
225
- 'lang.codeStays': '除非单独指定,模型读到的语言跟随屏幕。代码、工具名和参数名保持原样。',
226
- 'lang.promptNow': '给模型的指令用 {이름}。',
227
- 'lang.follows': '与屏幕相同',
228
- 'lang.splitHowto': '想用英语下指令、用中文看回答:',
229
- 'lang.promptChanged': '指令用 {이름},回答用 {답} — 8k 窗口下固定开销减少 23%。',
230
- 'lang.envHint': '想每次都用这个语言启动,设置 DEEL_LANG=zh',
231
- 'cmd.lsp.desc': '语言服务 — 装了哪些,Def/Refs 能不能用',
232
- 'cmd.lsp.arg': '[on|off]',
233
- 'lsp.found': '本机有 {수} 个语言服务',
234
- 'lsp.none': '本机没有语言服务。退回到 Grep 和 Outline。',
235
- 'lsp.thisFolder': '这个文件夹的语言:',
236
- 'lsp.noneHere': '没有可用的',
237
- 'lsp.fileCount': '{수} 个文件',
238
- 'lsp.tools': '工具:',
239
- 'lsp.toolsHidden': '已隐藏 (这里没有对应服务)',
240
- 'lsp.diag': '编辑后的诊断:',
241
- 'lsp.stateOn': '开',
242
- 'lsp.stateOff': '关',
243
- 'lsp.ready': '就绪',
244
- 'lsp.starting': '启动中',
245
- 'lsp.diagOn': '编辑后的诊断已开。',
246
- 'lsp.diagOff': '编辑后的诊断已关。Def 和 Refs 仍然可用。',
247
- 'lsp.installHint': '装上之后 Def / Refs 就会出现:',
248
- 'lsp.neverInstalls': 'deel 不装任何东西。上面是给你自己敲的命令。',
249
- 'lsp.howto': '开关编辑后的诊断:',
250
- 'cmd.export.desc': '把这次对话导成一页 HTML 报告 — 问了什么、改了什么、验证了什么',
251
- 'cmd.export.arg': '[文件名]',
252
- 'export.untitled': '未命名的对话',
253
- 'export.model': '模型',
254
- 'export.calls': '{수} 次工具调用',
255
- 'export.conversation': '问了什么,答了什么',
256
- 'export.you': '你',
257
- 'export.nothing': '什么也没说。',
258
- 'export.changed': '改动的文件',
259
- 'export.file': '文件',
260
- 'export.times': '次数',
261
- 'export.noChanges': '没有文件被改动。',
262
- 'export.evidence': '实际跑过的东西',
263
- 'export.nothingRan': '没有跑过任何命令。',
264
- 'export.unproven': '未经证实',
265
- 'export.allProven': '没有 — 每一处改动后面都有一次检查。',
266
- 'export.footer': '由 deel 生成的报告。没有外链 — 在任何网络下都能打开。',
267
- 'export.saved': '报告已保存:',
268
- 'export.openHint': '双击打开。可以直接附在评审或汇报里。',
269
- 'export.failed': '报告保存不了。检查一下文件夹权限。',
270
- 'help.titleCommon': '命令 (常用的)',
271
- 'help.title': '命令',
272
- 'help.moreHidden': '还有 {n} 个 — 敲出来一样能用。',
273
- 'help.showAll': '想看全部',
274
- 'help.restGoesToModel': '其余的都会发给模型。空行上按 Ctrl+C 退出。',
275
- 'approve.auto.name': '自动批准',
276
- 'approve.auto.short': '自动',
277
- 'approve.auto.line': '不问就改。/undo 是兜底',
278
- 'approve.confirm.name': '只问危险的',
279
- 'approve.confirm.short': '危险时',
280
- 'approve.confirm.line': '收不回的命令之前会问。改文件不问',
281
- 'approve.strict.name': '每次都问',
282
- 'approve.strict.short': '每次',
283
- 'approve.strict.line': '每改一个文件、每跑一条命令都问',
284
- 'level.beginner.name': '新手',
285
- 'level.beginner.hint': '按推荐设置开始',
286
- 'level.developer.name': '开发者',
287
- 'level.developer.hint': '全部自己来',
288
- 'plan.ask': '就按这个做吗?',
289
- 'plan.hint': '⏎ 开始 · y 加一句再开始 · 3 对那一步说一句 · n 取消',
290
- 'plan.cancelled': '停下了。计划还在上面,接着说就行。',
291
- 'plan.going': '按计划开始。',
292
- 'plan.goingWith': '带上你这句话开始 — {말}',
293
- 'plan.replan': '按这一点重新出计划。',
294
- 'plan.replanStep': '按你对第 {단계} 步的说法重新出计划。',
295
- 'ask.title': '有个问题问你',
296
- 'ask.pickHint': '选一个编号。有话要说就写在编号后面 (2 文件分开写)',
297
- 'ask.freeHint': '写下你的回答',
298
- 'ask.pickPrompt': '1-{끝}(后面可以加一句话),或者自己写',
299
- 'ask.freePrompt': '回答',
300
- 'ask.stopped': '已停止 — 按没有回答继续。',
301
- 'loop.backoff': '服务端把请求推回来了 ({무엇}) — {초} 秒后再试 ({n}/{max})',
302
- 'cost.retries': '重试',
303
- // ── 计数词 ────────────────────────────────────────────────────────────
304
- 'unit.files': '{n}个文件',
305
- 'unit.files1': '1个文件',
306
- 'unit.hits': '{n}处匹配',
307
- 'unit.hits1': '1处匹配',
308
- 'unit.lines': '{n}行',
309
- 'unit.lines1': '1行',
310
- 'unit.spots': '{n}处',
311
- 'unit.spots1': '1处',
312
- 'unit.places': '{n}处',
313
- 'unit.places1': '1处',
314
- 'unit.count': '{n}个',
315
- 'unit.count1': '1个',
316
- 'unit.chars': '{n}字',
317
- 'unit.kchars': '{n}k字',
318
- 'unit.calls': '{n}次',
319
- 'unit.sec': '{n}秒',
320
- 'unit.min': '{n}分钟',
321
-
322
- 'sum.done': '完成',
323
- 'sum.ok': '成功',
324
- 'sum.exitCode': '退出码 {code}',
325
- 'sum.killedBy': '被 {시그널} 结束',
326
- 'sum.tooMuchOut': '输出太多,接到一半就停了',
327
- 'sum.cantRun': '没能运行({왜})',
328
- 'sum.partial': '仅部分',
329
- 'sum.cut': '已截断',
330
- 'sum.notAllSeen': '未全部扫描',
331
- 'sum.filesFailed': '{n}个失败',
332
- 'sum.spotsFailed': '{n}处失败',
333
- 'sum.moved': '移动{n}个',
334
- 'sum.total': '共{줄}',
335
- 'sum.addedLines': '+{줄}',
336
- 'sum.noVision': '当前模型看不了图片',
337
- 'sum.emptyAnswer': '空回答',
338
- 'sum.unread': '读不了{n}个',
339
- 'sum.doneOf': '{끝}/{전체} 完成',
340
- 'sum.justDone': '刚完成{n}个',
341
- 'sum.noChange': '没有变化',
342
- 'sum.verified': '核对{n}项',
343
- 'sum.readAs': '用 {쓴것} 转换后读取',
344
- 'sum.encGuess': '{인코딩}(推测)',
345
- 'sum.linesOf': '{준}/{전체}行',
346
- 'sum.countOf': '{n}/{전체}个',
347
- 'sum.remembered': '已记住({n}行)',
348
- 'sum.rememberFull': '位置满了,已移除最旧的',
349
- 'sum.recall': '过往对话 {전체}条中 {맞음}条',
350
- 'sum.jobStarted': '以{n}号启动',
351
- 'sum.jobRunning': '运行中',
352
- 'sum.jobEndedAlready': '已经结束',
353
- 'sum.jobNotStopped': '没有结束 — 还活着',
354
- 'sum.jobStopped': '已结束',
355
-
356
- 'tier.exact': '完全匹配',
357
- 'tier.trail': '忽略行尾空白和换行差异',
358
- 'tier.indent': '忽略缩进差异',
359
- 'tier.space': '忽略所有空白差异',
360
-
361
- 'sum.image': '图片',
362
- 'sum.imageDropped': '省略图片 {크기}',
363
-
364
- 'sum.broken': '{n}处问题',
365
- 'sum.unverified': '{n}项未核对',
366
- 'lsp.noDef': '找不到定义。用 Grep 试试。',
367
- 'lsp.defs': '定义 {n}',
368
- 'lsp.noRefs': '没有任何地方用到。',
369
- 'lsp.refs': '使用 {자리} · 文件 {파일}',
370
-
371
- 'sum.nothingToCheck': '没有可核对的东西',
372
- 'job.no': '{n}号',
373
- 'job.stop': '结束',
374
- 'more.files': '另外{n}个',
375
- 'more.spots': '另外{n}处',
376
-
377
- 'err.noSuchFile': '没有这个文件: {경로}',
378
- 'err.alreadyThere': '已经存在: {경로}',
379
- 'err.overwriteHint': '要覆盖请传 overwrite: true。',
380
-
381
- 'run.ctxProbe': '正在确认模型启动时的上下文长度…',
382
- 'run.noStream': '没有流式输出,回答会一次性出现',
383
- 'run.hintHelp': '/help 命令列表',
384
- 'run.hintEsc': 'ESC 中断',
385
- 'run.hintQuit': 'Ctrl+C 中断·退出',
386
- 'run.stopping': '正在停止…',
387
- 'run.errKept': '出错前收到的内容已经留在对话里 — 可以直接接着说。',
388
- 'ev.capped': '回答在 {한계} 个 token 处被截断 — 用 /out 调高上限,或者让文件分次写',
389
- 'ev.cutoff': '服务端没说结束就停下了 — 回答可能是中途断的',
390
- 'ev.nudgeMissed': '还剩你交代的 {n} 件事没做就要收尾,已经推回去一次',
391
- 'ev.nudgeRead': '只看不动就要收尾,已经推回去一次',
392
- 'ev.learnedCtx': '按服务端给出的上下文上限 {한계} 重新调用',
393
- 'ev.learnedOut': '按服务端给出的回答长度上限 {한계} 重新调用',
394
- 'ev.reset': '位置不够,已清掉前面 {버린수} 条对话继续做 — 还剩 {할일} 件待办',
395
- 'ev.resetBare': '位置不够,已清掉前面 {버린수} 条对话继续做',
396
- 'paste.chip': '粘贴',
397
- 'paste.chipLines': '{n}行',
398
- 'paste.folded': '{표} — 已折起。发送时会原样展开。',
399
- 'paste.pasted': '已粘贴 {n} 行 — 按 Enter 一次发送',
400
- 'run.thinking': '思考中…',
401
- 'run.thinkingChars': '思考中… {n}字',
402
- 'run.turnFoot': '{초}秒 · 工具{n}次 · ↑{입력} ↓{출력}',
403
- 'run.bye': '结束。',
404
- 'run.byeStats': '模型调用{n}次 · 工具耗时{초}秒 · ↑{입력} ↓{출력}',
405
- 'run.notMade': '— 没有被创建',
406
- 'store.notSaving': '这次对话没有写入文件({까닭})— 已丢失 {n} 行。现在关闭窗口就无法继续。',
407
-
408
- 'stage.plan': '先做判断',
409
- 'stage.work': '接着做',
410
- 'stage.fix': '卡住时',
411
-
412
- 'scr.tools': '工具',
413
- 'scr.conn': '连接',
414
- 'scr.session': '本次会话',
415
- 'status.kind': '规格',
416
- 'status.url': '地址',
417
- 'status.proxy': '代理',
418
- 'status.proxyOff': '用不了',
419
- 'status.model': '模型',
420
- 'status.root': '工作目录',
421
- 'status.shell': 'Shell',
422
- 'status.keyStore': '密钥存放',
423
- 'status.rules': '规则',
424
- 'status.noRules': '无(可用 /init 建一个)',
425
- 'status.rulesUnread': '{이름} 存在但读不了({까닭})— 本文件夹的规则没有生效',
426
- 'status.caps': '支持',
427
- 'status.capTools': '工具',
428
- 'status.capStream': '流式',
429
- 'status.capSchema': '结构化',
430
- 'status.capThink': '推理',
431
- 'cost.calls': '模型调用',
432
- 'cost.tokIn': '输入 token',
433
- 'cost.tokOut': '输出 token',
434
- 'cost.toolMs': '工具耗时',
435
- 'cost.elapsed': '已用时',
436
- 'cost.money': '费用',
437
- 'cost.quota': '服务器额度',
438
- 'cost.quotaAge': '基于{초}秒前的响应',
439
-
440
- 'scr.context': '上下文',
441
- 'unit.tokens': '{n} token',
442
- 'ctx.system': '系统提示',
443
- 'ctx.rules': '规则 ({이름})',
444
- 'ctx.rulesNone': '规则 ()',
445
- 'ctx.memory': '记忆 ({n}行)',
446
- 'ctx.learned': '在这里学到的',
447
- 'ctx.skills': '技能列表 ({실림}/{전체})',
448
- 'ctx.tools': '工具定义',
449
- 'ctx.history': '对话历史',
450
- 'ctx.toolResults': '工具结果 (文件{n}个)',
451
- 'ctx.left': '剩余',
452
- 'ctx.compactHint': '折叠对话',
453
- 'ctx.clearHint': '全部清空',
454
- 'ctx.calibrated': '已按服务器实测值校正 {부호}{퍼센트}%(采样{번}次)。',
455
- 'ctx.estimate': '数字为估算没有使用精确的分词器。',
456
-
457
- 'auth.waiting': '正在等待公司登录…',
458
- 'auth.got': '已取得密钥 — 大约可用{}分钟',
459
- 'auth.failed': '没能取得密钥{왜}',
460
- 'auth.from': '取得',
461
- 'auth.fromPolicy': '取得(管理策略)',
462
- 'auth.leftMin': '剩余{분}分钟',
463
- 'auth.notYet': '尚未取得',
464
-
465
- 'undo.wayRestored': '已还原',
466
- 'undo.wayDeleted': '已删除(原本不存在的文件)',
467
-
468
- 'common.unknownCommand': '不认识的命令',
469
- 'common.seeHelp': ' /help 看命令列表',
470
- 'common.yes': '',
471
- 'common.no': '',
472
- 'common.cfgSaveFailed': '设置没能写入文件({})— 本次有效,重开就会恢复原样。',
473
- };
1
+ /**
2
+ * 屏幕文字 — 简体中文.
3
+ *
4
+ * 코드는 한국어 그대로다. 여기서 바꾸는 것은 **화면에 나가는 말**뿐이다.
5
+ * 자리 이름({이름}·{n} 같은 것)은 코드가 그 이름으로 값을 넣으므로
6
+ * **한 글자도 바꾸면 안 된다.** 바꾸면 그 자리가 중괄호째 화면에 찍힌다.
7
+ *
8
+ * 안 옮긴 열쇠는 영어 → 한국어 순으로 받친다(i18n/index.js). 빈칸은 안 낸다.
9
+ */
10
+ export const zh = {
11
+ 'cmd.help.desc': '列出命令',
12
+ 'cmd.clear.desc': '清空对话',
13
+ 'cmd.context.desc': '查看上下文用量',
14
+ 'cmd.ctx.desc': '上下文长度 — 为这个模型重新测量,或自己指定',
15
+ 'cmd.ctx.arg': '[auto|数字|640k]',
16
+ 'cmd.out.desc': '单次回复上限 — 大文件被截断时调高',
17
+ 'cmd.out.arg': '[数字|32k|auto]',
18
+ 'cmd.grade.desc': '模型等级 — 能独立做到哪一步。与窗口大小不是同一件事',
19
+ 'cmd.grade.arg': '[small|medium|large|auto]',
20
+ 'cmd.compact.desc': '折叠较早的对话',
21
+ 'cmd.model.desc': '切换连接与模型 · `card` 显示这个模型在这里做过什么',
22
+ 'cmd.model.arg': '[名称|list|models|card]',
23
+ 'cmd.think.desc': '推理力度 (off/low/medium/high/max)',
24
+ 'cmd.think.arg': '<级别>',
25
+
26
+ // ── /think 画面 ─────────────────────────────────────────────────────
27
+ // 只译表格的框、不译里面的内容(阶段名),就等于什么都读不懂。
28
+ // 阶段名·分配名在 agent/effort.js 里 — 和 modes.js 一样的做法。
29
+ 'run.noTools': '尚未确认工具调用 — 请用 deel diagnose 检查',
30
+ 'think.effort': '推理力度',
31
+ 'think.profile': '分配',
32
+ 'think.detail': '详细',
33
+ 'think.harder': '更用力',
34
+ 'think.faster': '更快',
35
+ 'think.eg': '例',
36
+ 'think.col.stage': '阶段',
37
+ 'think.col.level': '力度',
38
+ 'think.col.cap': '输出上限',
39
+ 'think.col.when': '何时',
40
+ 'think.cap.head': '输出上限在',
41
+ 'think.cap.tail': ' 之内分配 —',
42
+ 'think.cap.you': '(您自己定的值)',
43
+ 'think.cap.server': '(从服务器读到的值)',
44
+ 'think.cap.guess': '(不知道,所以用默认值)',
45
+ 'think.ctx': '上下文',
46
+ 'think.ctx.used': ' · 已用 ',
47
+ 'think.nomodel': '这个连接不会在模型那一层调节推理力度。',
48
+ 'think.nomodel.note': '只有各阶段的输出上限会生效。',
49
+
50
+ 'cmd.mode.desc': '批准策略 — 先问到什么程度 (auto/confirm/strict)',
51
+ 'cmd.mode.arg': '<模式>',
52
+ 'cmd.work.desc': '工作模式 — 这是哪一类活儿 (auto 会替你选)',
53
+ 'cmd.work.arg': '[模式]',
54
+ 'cmd.auto.desc': '工作模式 → auto (随请求自动切换。与 /mode 不同)',
55
+ 'cmd.code.desc': '工作模式 → code (动手改和搭)',
56
+ 'cmd.plan.desc': '工作模式 → plan (先规划,不改文件)',
57
+ 'cmd.architect.desc': '工作模式 → architect (定结构)',
58
+ 'cmd.debug.desc': '工作模式 → debug (找原因)',
59
+ 'cmd.ask.desc': '工作模式 → ask (只解释)',
60
+ 'cmd.orchestrator.desc': '工作模式 → orchestrator (把大活儿拆开)',
61
+ 'cmd.undo.desc': '撤销上一轮 — 文件和对话一起',
62
+ 'cmd.undo.arg': '[轮数]',
63
+ 'cmd.diff.desc': '本次对话改动的文件,以及改了什么',
64
+ 'cmd.diff.arg': '[文件]',
65
+ 'cmd.preview.desc': '就地把做好的东西跑起来 — 不用部署',
66
+ 'cmd.preview.arg': '[文件夹|off]',
67
+ 'cmd.tools.desc': '查看可用的工具',
68
+ 'cmd.skills.desc': '浏览、搜索、加载技能',
69
+ 'cmd.skills.arg': '[search|all|off]',
70
+ 'cmd.plugin.desc': '插件 — 列出、安装、删除、打包供离线导入',
71
+ 'cmd.plugin.arg': '[install|remove|pack]',
72
+ 'cmd.cost.desc': '本次对话的用量',
73
+ 'cmd.status.desc': '连接状态',
74
+ 'cmd.scan.desc': '扫描本机上的本地模型服务',
75
+ 'cmd.scan.arg': '[save]',
76
+ 'cmd.thread.desc': '话题分支 — 岔开一条路。连接和撤销记录仍然共用',
77
+ 'cmd.thread.arg': '[new|fork|close|编号|名称]',
78
+ 'cmd.learned.desc': 'deel 自己攒下的东西 — 这里能用的命令、这个模型的习惯',
79
+ 'cmd.learned.arg': '[clear]',
80
+ 'cmd.pin.desc': '钉住一行 — 折叠和摘要都不会把它弄丢',
81
+ 'cmd.pin.arg': '[文字|clear 编号|clear all]',
82
+ 'cmd.evidence.desc': '证据 — 改了什么,什么能证明它。没有依据的也照说',
83
+ 'cmd.evidence.arg': '[文件]',
84
+ 'cmd.commit.desc': '提交 — 只放入本次对话改的东西;说明由差异和证据生成',
85
+ 'cmd.review.desc': '在新的上下文里再看一遍改动 — 只报告发现,什么都不改',
86
+ 'cmd.paste.desc': '贴上剪贴板里的截图 (先截图,再 /paste)',
87
+ 'cmd.commit.arg': '[all|preview|标题]',
88
+ 'cmd.sessions.desc': '这个文件夹里留下的历史对话',
89
+ 'cmd.recall.desc': '搜索历史对话 — 按内容找,不是按标题',
90
+ 'cmd.recall.arg': '<文字>',
91
+ 'cmd.mcp.desc': '已连接的 MCP 工具服务',
92
+ 'cmd.memory.desc': '跨对话保留的东西 — 查看和清除',
93
+ 'cmd.memory.arg': '[forget <n>|clear|<要记住的话>]',
94
+ 'cmd.level.desc': '使用者级别 (新手/开发者)',
95
+ 'cmd.level.arg': '[级别]',
96
+ 'cmd.keys.desc': '按键看终端到底发出了什么 — 换行不管用的时候',
97
+ 'cmd.bell.desc': '一轮结束或需要你回答时的提示音和窗口标题 (on/off)',
98
+ 'cmd.bell.arg': '[on|off]',
99
+ 'cmd.motion.desc': '干活时动的东西 — 骑士、动物、办公室',
100
+ 'cmd.motion.arg': '[knight|animal|office|default|off]',
101
+ 'cmd.lang.desc': '屏幕语言 — 한국어 / English / 日本語 / 中文',
102
+ 'cmd.lang.arg': '[ko|en|ja|zh] [指令语言]',
103
+ 'cmd.init.desc': '创建 DEEL.md 规则文件',
104
+ 'cmd.exit.desc': '退出',
105
+ 'cmd.quit.desc': '退出',
106
+ 'cmd.consult.desc': '向另一个模型问一个问题 — 当前模型保持不动',
107
+ 'cmd.consult.arg': '[配置 <问题>]',
108
+ 'consult.title': '本机上配置好的模型',
109
+ 'consult.noProfiles': '没有配置。请用 /scan 查找本地服务。',
110
+ 'consult.current': '(使用中)',
111
+ 'consult.usage': '用法: /consult <配置> <问题> 例: /consult small 这个正则在做什么',
112
+ 'consult.questionOnly': '只发送问题 — 这段对话不会跟着过去。需要的背景请写进问题里。',
113
+ 'consult.candidates': '匹配到的:',
114
+ 'consult.have': '可用的:',
115
+ 'consult.needQuestion': '请写下想问 {이름} 的内容。例: /consult {이름} 这个报错是什么意思',
116
+ 'consult.goesOut': '— 这个问题会离开你的机器',
117
+ 'consult.asking': '正在问 {모델}…',
118
+ 'consult.system': '你是被另一个编程助手咨询的模型。请简短准确地回答。不知道就说不知道。这是在向你提问,不是让你改文件。',
119
+ 'consult.failed': '问不成 — {왜}',
120
+ 'consult.empty': '返回是空的。那个模型可能不带工具就不回答。',
121
+ 'consult.added': '已把那个回答加进对话,并标明是谁说的。',
122
+ 'probe.codexOnly': '{모델} 系列无法通过这个接口(/chat/completions)使用 — OpenAI 只通过 Responses API(/responses) 提供该系列,而 deel 还不会说那个接口。请暂时改选别的模型。',
123
+ 'head.spec.ollama': 'Ollama 自有规格',
124
+ 'head.spec.openai': 'OpenAI 兼容 API',
125
+ 'head.spec.anthropic': 'Anthropic API',
126
+ 'head.mode.default': '本机内(默认)',
127
+ 'head.mode.online': '外部(online)',
128
+ 'head.mode.offline': '封锁(offline)',
129
+ 'head.model': '模型',
130
+ 'head.tokens': '词元',
131
+ 'head.grade': '等级',
132
+ 'head.guess': '推测',
133
+ 'head.send': '发往',
134
+ 'head.inside': '本机内',
135
+ 'head.outside': '外部',
136
+ 'head.offlineLock': '[离线锁定]',
137
+ 'head.viaProxy': '经代理 {프록시}',
138
+ 'head.proxyBad': '[代理设置不可用 — 见 /status]',
139
+ 'head.nowhereElse': '← 除此之外哪儿也不去',
140
+ 'head.glyphHint': '状态栏开头的 {안} 表示这一点。有流量出去时会变成 {밖}。',
141
+ 'head.conn': '连接',
142
+ 'head.streaming': '流式',
143
+ 'head.noStreaming': '非流式',
144
+ 'head.tools': '工具',
145
+ 'head.toolsUnknown': '工具未确认',
146
+ 'head.thinkCtl': '推理力度可调',
147
+ 'head.noThinkCtl': '推理力度不可调',
148
+ 'head.folder': '文件夹',
149
+ 'head.approve': '批准',
150
+ 'head.shiftTab': 'Shift+Tab',
151
+ 'head.shiftTabHint': ' 可切换 · ',
152
+ 'head.tabHint': 'Tab 补全你正在输入的 / 命令',
153
+ 'head.newlineHint': '换行: Alt+Enter (Mac 上是 Option+Enter) 在框内换行 · 若终端吞掉它,就在行尾加空格和 ` 再回车',
154
+ 'head.star': '觉得这个工具好用?去 GitHub 点个 Star —',
155
+ 'head.thisPC': '找到',
156
+ 'head.skills': '技能 {n}',
157
+ 'head.commands': '命令 {n}',
158
+ 'head.plugins': '插件 {n}',
159
+ 'grade.small': '小',
160
+ 'grade.medium': '中',
161
+ 'grade.large': '大',
162
+ 'head.gradeSuffix': ' · {급} {급이름}{짐작}',
163
+ 'seg.dir': '工作文件夹 (前面的 ⌂/↗ 表示你写的东西会去哪里)',
164
+ 'seg.ver': '版本号',
165
+ 'seg.thread': '分支',
166
+ 'seg.model': '模型名',
167
+ 'seg.grade': '模型等级 (能独立做到哪一步)',
168
+ 'seg.ctx': '已用上下文 (刻度是折叠与摘要开始的位置)',
169
+ 'seg.work': '工作模式',
170
+ 'seg.think': '推理力度与分配',
171
+ 'seg.mode': '批准策略',
172
+ 'seg.edits': '本次对话改动的文件',
173
+ 'seg.verify': '真正验证过的东西',
174
+ 'seg.undoable': '还能撤销的轮数',
175
+ 'seg.tok': '输入/输出词元',
176
+ 'seg.cost': '已花费金额(仅在已知价格时)',
177
+ 'seg.tools': '工具调用',
178
+ 'seg.skills': '本机上找到的技能',
179
+ 'seg.time': '开始以来的时间',
180
+ 'intro.inside': '不离开本机',
181
+ 'intro.outside': '会离开本机',
182
+ 'undo.nothing': '没有可撤销的。',
183
+ 'undo.done': '已撤销 {turns} 轮 · 恢复了 {files} 个文件。',
184
+ 'undo.alsoTalk': '同时撤回了 {n} 条消息 — 如果模型还以为被撤销的代码在,它会继续往上搭。',
185
+ 'undo.repaired': '(另外清理了 {n} 个悬空的工具调用)',
186
+ 'undo.saidWas': '你当时说的是:',
187
+ 'undo.failed': '有 {n} 个没能还原 — 那些文件还是改过的样子。备份留着,请再试一次 /undo。',
188
+ 'undo.talkKept': '对话保持原样 — 那一轮早就被折叠了。',
189
+ 'undo.talkKeptWhy': '模型可能仍以为撤销掉的工作还在,下一句里提一下。',
190
+ 'bell.stateOn': '开',
191
+ 'bell.stateOff': '关',
192
+ 'bell.now': '提示音现在是{상태}。',
193
+ 'bell.when': '一轮超过 {초} 秒时响一次,deel 需要你回答时也会响。',
194
+ 'bell.title': '窗口标题也会显示状态 — 只看标签页就知道是不是还在干活。',
195
+ 'bell.howto': '要修改',
196
+ 'bell.notATty': '(现在不是终端,所以没有提示音也没有标题 — 那会弄坏管道。)',
197
+ 'bell.needOnOff': '请说 on 或 off。',
198
+ 'bell.turnedOn': '提示音已开。',
199
+ 'bell.turnedOff': '提示音已关。',
200
+ 'bell.justRang': '刚才响了一次。要是没听见,看看终端的响铃设置。',
201
+ 'bell.appliesNow': '本次对话立即生效。',
202
+ 'motion.now': '当前:',
203
+ 'motion.plain': '一格的转圈。安静',
204
+ 'motion.knight': '骑士挥剑。偶尔被压扁',
205
+ 'motion.animal': '像素动物四处走动',
206
+ 'motion.office': '输入框上方十二行办公室 — 把工作当成一个房间',
207
+ 'motion.off': '什么都不画 (给读屏软件用户)',
208
+ 'motion.set': '已换成 {것}。',
209
+ 'motion.appliesNow': '下一帧起可见。也已写进配置。',
210
+ 'motion.unknown': '"{값}" 不在其中。',
211
+ 'motion.pickOne': '从这些里选一个:',
212
+ 'motion.envWins': '设置了 DEEL_MOTION / DEEL_OFFICE,环境变量优先。',
213
+ 'motion.tooSmall': '这个终端是 {줄} x {칸} — 办公室至少要 {최소줄} 行 {최소칸} 列。',
214
+ 'motion.appleTerminal': 'macOS 的 Terminal 会拉开行距,房间里会出现横缝 — Terminal › 设置 › 描述文件 › 文本 › 字体「更改」› 把行距设为 1.0。(iTerm2 默认就是 1.0,所以那边看着正常)',
215
+ 'lang.now': '屏幕语言是 {이름}。',
216
+ 'lang.ko': '한국어 (韩语)',
217
+ 'lang.en': 'English (英语)',
218
+ 'lang.ja': '日本語 (日语)',
219
+ 'lang.zh': '中文 (简体)',
220
+ 'lang.howto': '要修改',
221
+ 'lang.changed': '屏幕语言已改为 {이름}。',
222
+ 'lang.unknown': '请指定 ko · en · ja · zh 之一。',
223
+ 'lang.progress': '{언어}: 共 {전체} 条,已翻译 {옮김} 条。其余按英语或韩语显示。',
224
+ 'lang.partial': '还没有全部译完 — 未翻译的行显示英语或韩语,不会留空。',
225
+ 'lang.codeStays': '除非单独指定,模型读到的语言跟随屏幕。代码、工具名和参数名保持原样。',
226
+ 'lang.promptNow': '给模型的指令用 {이름}。',
227
+ 'lang.follows': '与屏幕相同',
228
+ 'lang.splitHowto': '想用英语下指令、用中文看回答:',
229
+ 'lang.promptChanged': '指令用 {이름},回答用 {답} — 8k 窗口下固定开销减少 23%。',
230
+ 'lang.envHint': '想每次都用这个语言启动,设置 DEEL_LANG=zh',
231
+ 'cmd.lsp.desc': '语言服务 — 装了哪些,Def/Refs 能不能用',
232
+ 'cmd.lsp.arg': '[on|off]',
233
+ 'lsp.found': '本机有 {수} 个语言服务',
234
+ 'lsp.none': '本机没有语言服务。退回到 Grep 和 Outline。',
235
+ 'lsp.thisFolder': '这个文件夹的语言:',
236
+ 'lsp.noneHere': '没有可用的',
237
+ 'lsp.fileCount': '{수} 个文件',
238
+ 'lsp.tools': '工具:',
239
+ 'lsp.toolsHidden': '已隐藏 (这里没有对应服务)',
240
+ 'lsp.diag': '编辑后的诊断:',
241
+ 'lsp.stateOn': '开',
242
+ 'lsp.stateOff': '关',
243
+ 'lsp.ready': '就绪',
244
+ 'lsp.starting': '启动中',
245
+ 'lsp.diagOn': '编辑后的诊断已开。',
246
+ 'lsp.diagOff': '编辑后的诊断已关。Def 和 Refs 仍然可用。',
247
+ 'lsp.installHint': '装上之后 Def / Refs 就会出现:',
248
+ 'lsp.neverInstalls': 'deel 不装任何东西。上面是给你自己敲的命令。',
249
+ 'lsp.howto': '开关编辑后的诊断:',
250
+ 'cmd.export.desc': '把这次对话导成一页 HTML 报告 — 问了什么、改了什么、验证了什么',
251
+ 'cmd.export.arg': '[文件名]',
252
+ 'export.untitled': '未命名的对话',
253
+ 'export.model': '模型',
254
+ 'export.calls': '{수} 次工具调用',
255
+ 'export.conversation': '问了什么,答了什么',
256
+ 'export.you': '你',
257
+ 'export.nothing': '什么也没说。',
258
+ 'export.changed': '改动的文件',
259
+ 'export.file': '文件',
260
+ 'export.times': '次数',
261
+ 'export.noChanges': '没有文件被改动。',
262
+ 'export.evidence': '实际跑过的东西',
263
+ 'export.nothingRan': '没有跑过任何命令。',
264
+ 'export.unproven': '未经证实',
265
+ 'export.allProven': '没有 — 每一处改动后面都有一次检查。',
266
+ 'export.footer': '由 deel 生成的报告。没有外链 — 在任何网络下都能打开。',
267
+ 'export.saved': '报告已保存:',
268
+ 'export.openHint': '双击打开。可以直接附在评审或汇报里。',
269
+ 'export.failed': '报告保存不了。检查一下文件夹权限。',
270
+ 'help.titleCommon': '命令 (常用的)',
271
+ 'help.title': '命令',
272
+ 'help.moreHidden': '还有 {n} 个 — 敲出来一样能用。',
273
+ 'help.showAll': '想看全部',
274
+ 'help.restGoesToModel': '其余的都会发给模型。空行上按 Ctrl+C 退出。',
275
+ 'approve.auto.name': '自动批准',
276
+ 'approve.auto.short': '自动',
277
+ 'approve.auto.line': '不问就改。/undo 是兜底',
278
+ 'approve.confirm.name': '只问危险的',
279
+ 'approve.confirm.short': '危险时',
280
+ 'approve.confirm.line': '收不回的命令之前会问。改文件不问',
281
+ 'approve.strict.name': '每次都问',
282
+ 'approve.strict.short': '每次',
283
+ 'approve.strict.line': '每改一个文件、每跑一条命令都问',
284
+ 'level.beginner.name': '新手',
285
+ 'level.beginner.hint': '按推荐设置开始',
286
+ 'level.developer.name': '开发者',
287
+ 'level.developer.hint': '全部自己来',
288
+ 'plan.ask': '就按这个做吗?',
289
+ 'plan.hint': '⏎ 开始 · y 加一句再开始 · 3 对那一步说一句 · n 取消',
290
+ 'plan.cancelled': '停下了。计划还在上面,接着说就行。',
291
+ 'plan.going': '按计划开始。',
292
+ 'plan.goingWith': '带上你这句话开始 — {말}',
293
+ 'plan.replan': '按这一点重新出计划。',
294
+ 'plan.replanStep': '按你对第 {단계} 步的说法重新出计划。',
295
+ 'ask.title': '有个问题问你',
296
+ 'ask.pickHint': '选一个编号。有话要说就写在编号后面 (2 文件分开写)',
297
+ 'ask.freeHint': '写下你的回答',
298
+ 'ask.pickPrompt': '1-{끝}(后面可以加一句话),或者自己写',
299
+ 'ask.freePrompt': '回答',
300
+ 'ask.stopped': '已停止 — 按没有回答继续。',
301
+ 'loop.backoff': '服务端把请求推回来了 ({무엇}) — {초} 秒后再试 ({n}/{max})',
302
+ 'cost.retries': '重试',
303
+ // ── 计数词 ────────────────────────────────────────────────────────────
304
+ 'unit.files': '{n}个文件',
305
+ 'unit.files1': '1个文件',
306
+ 'unit.hits': '{n}处匹配',
307
+ 'unit.hits1': '1处匹配',
308
+ 'unit.lines': '{n}行',
309
+ 'unit.lines1': '1行',
310
+ 'unit.spots': '{n}处',
311
+ 'unit.spots1': '1处',
312
+ 'unit.places': '{n}处',
313
+ 'unit.places1': '1处',
314
+ 'unit.count': '{n}个',
315
+ 'unit.count1': '1个',
316
+ 'unit.chars': '{n}字',
317
+ 'unit.kchars': '{n}k字',
318
+ 'unit.calls': '{n}次',
319
+ 'unit.sec': '{n}秒',
320
+ 'unit.min': '{n}分钟',
321
+
322
+ 'sum.done': '完成',
323
+ 'sum.ok': '成功',
324
+ 'sum.exitCode': '退出码 {code}',
325
+ 'sum.killedBy': '被 {시그널} 结束',
326
+ 'sum.tooMuchOut': '输出太多,接到一半就停了',
327
+ 'sum.cantRun': '没能运行({왜})',
328
+ 'sum.partial': '仅部分',
329
+ 'sum.cut': '已截断',
330
+ 'sum.notAllSeen': '未全部扫描',
331
+ 'sum.filesFailed': '{n}个失败',
332
+ 'sum.spotsFailed': '{n}处失败',
333
+ 'sum.moved': '移动{n}个',
334
+ 'sum.total': '共{줄}',
335
+ 'sum.addedLines': '+{줄}',
336
+ 'sum.noVision': '当前模型看不了图片',
337
+ 'sum.emptyAnswer': '空回答',
338
+ 'sum.unread': '读不了{n}个',
339
+ 'sum.doneOf': '{끝}/{전체} 完成',
340
+ 'sum.justDone': '刚完成{n}个',
341
+ 'sum.noChange': '没有变化',
342
+ 'sum.verified': '核对{n}项',
343
+ 'sum.readAs': '用 {쓴것} 转换后读取',
344
+ 'sum.encGuess': '{인코딩}(推测)',
345
+ 'sum.linesOf': '{준}/{전체}行',
346
+ 'sum.countOf': '{n}/{전체}个',
347
+ 'sum.remembered': '已记住({n}行)',
348
+ 'sum.rememberFull': '位置满了,已移除最旧的',
349
+ 'sum.recall': '过往对话 {전체}条中 {맞음}条',
350
+ 'sum.jobStarted': '以{n}号启动',
351
+ 'sum.jobRunning': '运行中',
352
+ 'sum.jobEndedAlready': '已经结束',
353
+ 'sum.jobNotStopped': '没有结束 — 还活着',
354
+ 'sum.jobStopped': '已结束',
355
+
356
+ 'tier.exact': '完全匹配',
357
+ 'tier.trail': '忽略行尾空白和换行差异',
358
+ 'tier.indent': '忽略缩进差异',
359
+ 'tier.space': '忽略所有空白差异',
360
+
361
+ 'sum.image': '图片',
362
+ 'sum.imageDropped': '省略图片 {크기}',
363
+
364
+ 'sum.broken': '{n}处问题',
365
+ 'sum.unverified': '{n}项未核对',
366
+ 'lsp.noDef': '找不到定义。用 Grep 试试。',
367
+ 'lsp.defs': '定义 {n}',
368
+ 'lsp.noRefs': '没有任何地方用到。',
369
+ 'lsp.refs': '使用 {자리} · 文件 {파일}',
370
+
371
+ 'sum.nothingToCheck': '没有可核对的东西',
372
+ 'job.no': '{n}号',
373
+ 'job.stop': '结束',
374
+ 'more.files': '另外{n}个',
375
+ 'more.spots': '另外{n}处',
376
+
377
+ 'err.noSuchFile': '没有这个文件: {경로}',
378
+ 'err.alreadyThere': '已经存在: {경로}',
379
+ 'err.overwriteHint': '要覆盖请传 overwrite: true。',
380
+
381
+ 'run.ctxProbe': '正在确认模型启动时的上下文长度…',
382
+ 'run.noStream': '没有流式输出,回答会一次性出现',
383
+ 'run.hintHelp': '/help 命令列表',
384
+ 'run.hintEsc': 'ESC 中断',
385
+ 'run.hintQuit': 'Ctrl+C 中断·退出',
386
+ 'run.stopping': '正在停止…',
387
+ 'run.errKept': '出错前收到的内容已经留在对话里 — 可以直接接着说。',
388
+ 'ev.capped': '回答在 {한계} 个 token 处被截断 — 用 /out 调高上限,或者让文件分次写',
389
+ 'ev.cutoff': '服务端没说结束就停下了 — 回答可能是中途断的',
390
+ 'ev.nudgeMissed': '还剩你交代的 {n} 件事没做就要收尾,已经推回去一次',
391
+ 'ev.nudgeRead': '只看不动就要收尾,已经推回去一次',
392
+ 'ev.learnedCtx': '按服务端给出的上下文上限 {한계} 重新调用',
393
+ 'ev.learnedOut': '按服务端给出的回答长度上限 {한계} 重新调用',
394
+ 'ev.reset': '位置不够,已清掉前面 {버린수} 条对话继续做 — 还剩 {할일} 件待办',
395
+ 'ev.resetBare': '位置不够,已清掉前面 {버린수} 条对话继续做',
396
+ 'paste.chip': '粘贴',
397
+ 'paste.chipLines': '{n}行',
398
+ 'paste.folded': '{표} — 已折起。发送时会原样展开。',
399
+ 'paste.pasted': '已粘贴 {n} 行 — 按 Enter 一次发送',
400
+ 'run.thinking': '思考中…',
401
+ 'run.thinkingChars': '思考中… {n}字',
402
+ 'run.turnFoot': '{초}秒 · 工具{n}次 · ↑{입력} ↓{출력}',
403
+ 'run.bye': '结束。',
404
+ 'run.byeStats': '模型调用{n}次 · 工具耗时{초}秒 · ↑{입력} ↓{출력}',
405
+ 'run.notMade': '— 没有被创建',
406
+ 'store.notSaving': '这次对话没有写入文件({까닭})— 已丢失 {n} 行。现在关闭窗口就无法继续。',
407
+
408
+ 'stage.plan': '先做判断',
409
+ 'stage.work': '接着做',
410
+ 'stage.fix': '卡住时',
411
+
412
+ 'scr.tools': '工具',
413
+ 'scr.conn': '连接',
414
+ 'scr.session': '本次会话',
415
+ 'status.kind': '规格',
416
+ 'status.url': '地址',
417
+ 'status.proxy': '代理',
418
+ 'status.proxyOff': '用不了',
419
+ 'status.model': '模型',
420
+ 'status.root': '工作目录',
421
+ 'status.shell': 'Shell',
422
+ 'status.keyStore': '密钥存放',
423
+ 'status.rules': '规则',
424
+ 'status.noRules': '无(可用 /init 建一个)',
425
+ 'status.rulesUnread': '{이름} 存在但读不了({까닭})— 本文件夹的规则没有生效',
426
+ 'status.caps': '支持',
427
+ 'status.capTools': '工具',
428
+ 'status.capStream': '流式',
429
+ 'status.capSchema': '结构化',
430
+ 'status.capThink': '推理',
431
+ 'cost.calls': '模型调用',
432
+ 'cost.tokIn': '输入 token',
433
+ 'cost.tokOut': '输出 token',
434
+ 'cost.toolMs': '工具耗时',
435
+ 'cost.elapsed': '已用时',
436
+ 'cost.money': '费用',
437
+ // ── 缓存 · 线路卡 · 自动强度 ──────────────────────────────────────────
438
+ 'status.wire': '线路',
439
+ 'wire.think': '思考',
440
+ 'run.refusal': '模型拒绝了这个请求 — 不再重试,就此停止',
441
+ 'run.refusalWhy': '原因 {}',
442
+ 'wire.rungs': '档位',
443
+ 'wire.cache': '缓存',
444
+ 'wire.none': '无',
445
+ 'wire.cacheMarked': '标记',
446
+ 'wire.cacheKey': '',
447
+ 'wire.cacheAuto': '服务端',
448
+ 'cost.cache': '缓存',
449
+ 'cost.think': '思考',
450
+ 'cost.thinkLine': '{토큰} token · 占输出 {}%',
451
+ 'cost.cacheLine': '读取 {읽음} · 写入 {씀} · 命中 {몫}%',
452
+ 'cost.cacheColdWarn': '只有写入没有读取 — 前缀每次都在重建',
453
+ 'think.auto': '自动',
454
+ 'think.autoNote': '你设的值是上限 ({천장}) — 轻量请求降到 {지금}',
455
+ 'think.autoOn': '按请求内容选择强度你设的值成为上限',
456
+ 'think.autoOff': '始终使用你设定的强度',
457
+ 'think.wire': '线路',
458
+ 'think.wireSends': '实际发送 {}',
459
+ 'think.wireNoOff': '该端点未告知关闭值不发送该字段,因此按服务器默认值运行',
460
+ 'loop.wire': '服务端不接受该字段,已调整后重试 ({무엇})',
461
+ 'loop.quotaAhead': '额度用尽,等待 {초} 秒后再发送',
462
+ 'cost.quota': '服务器额度',
463
+ 'cost.quotaAge': '基于{초}秒前的响应',
464
+
465
+ 'scr.context': '上下文',
466
+ 'unit.tokens': '{n} token',
467
+ 'ctx.system': '系统提示',
468
+ 'ctx.rules': '规则 ({이름})',
469
+ 'ctx.rulesNone': '规则 (无)',
470
+ 'ctx.memory': '记忆 ({n}行)',
471
+ 'ctx.learned': '在这里学到的',
472
+ 'ctx.skills': '技能列表 ({실림}/{전체})',
473
+ 'ctx.tools': '工具定义',
474
+ 'ctx.history': '对话历史',
475
+ 'ctx.toolResults': '工具结果 (文件{n}个)',
476
+ 'ctx.left': '剩余',
477
+ 'ctx.compactHint': '折叠对话',
478
+ 'ctx.clearHint': '全部清空',
479
+ 'ctx.calibrated': '已按服务器实测值校正 {부호}{퍼센트}%(采样{번}次)。',
480
+ 'ctx.estimate': '数字为估算 — 没有使用精确的分词器。',
481
+
482
+ 'auth.waiting': '正在等待公司登录…',
483
+ 'auth.got': '已取得密钥 — 大约可用{분}分钟',
484
+ 'auth.failed': '没能取得密钥 — {왜}',
485
+ 'auth.from': '取得',
486
+ 'auth.fromPolicy': '取得(管理策略)',
487
+ 'auth.leftMin': '剩余{분}分钟',
488
+ 'auth.notYet': '尚未取得',
489
+
490
+ 'undo.wayRestored': '已还原',
491
+ 'undo.wayDeleted': '已删除(原本不存在的文件)',
492
+
493
+ 'common.unknownCommand': '不认识的命令',
494
+ 'common.seeHelp': '用 /help 看命令列表',
495
+ 'common.yes': '是',
496
+ 'common.no': '否',
497
+ 'common.cfgSaveFailed': '设置没能写入文件({왜})— 本次有效,重开就会恢复原样。',
498
+ };