zames_pro 2.64.0 → 2.65.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,362 @@
1
+ // Common UI strings: app/common, status, tasks, messages, diff, context, undo, cd.
2
+ export const commonMessages = {
3
+ 'app.tagline': {
4
+ ru: 'агент поверх chat.deepseek.com через Playwright',
5
+ en: 'coding agent over chat.deepseek.com via Playwright',
6
+ },
7
+ 'common.yes': { ru: 'да', en: 'yes' },
8
+ 'common.no': { ru: 'нет', en: 'no' },
9
+ 'common.on': { ru: 'вкл', en: 'on' },
10
+ 'common.off': { ru: 'выкл', en: 'off' },
11
+ 'common.none': { ru: '(нет)', en: '(none)' },
12
+ 'common.unknown': { ru: 'неизвестно', en: 'unknown' },
13
+ 'status.workdir': {
14
+ ru: 'Рабочая директория: {v}',
15
+ en: 'Working directory: {v}',
16
+ },
17
+ 'status.review_mode': { ru: 'Режим ревью: {v}', en: 'Review mode: {v}' },
18
+ 'status.review_none': { ru: 'нет', en: 'no' },
19
+ 'status.orig_dir': {
20
+ ru: 'Исходная директория: {v}',
21
+ en: 'Original directory: {v}',
22
+ },
23
+ 'status.chat': { ru: 'Текущий чат: {v}', en: 'Current chat: {v}' },
24
+ 'status.fresh_next': {
25
+ ru: 'Fresh chat на след. задаче: {v}',
26
+ en: 'Fresh chat next task: {v}',
27
+ },
28
+ 'status.prompt_next': {
29
+ ru: 'System prompt на след. задаче: {v}',
30
+ en: 'System prompt next task: {v}',
31
+ },
32
+ 'status.resend': {
33
+ ru: 'Resend prompt (--resend-prompt): {v}',
34
+ en: 'Resend prompt (--resend-prompt): {v}',
35
+ },
36
+ 'status.last_chat': { ru: 'Last chat: {v}', en: 'Last chat: {v}' },
37
+ 'status.sessions': { ru: 'Сессии: {v}', en: 'Sessions: {v}' },
38
+ 'status.dev': {
39
+ ru: 'Dev mode (auto-reload): {v}',
40
+ en: 'Dev mode (auto-reload): {v}',
41
+ },
42
+ 'status.max_iter': {
43
+ ru: 'Лимит итераций: {v} (0 = без лимита)',
44
+ en: 'Iteration limit: {v} (0 = unlimited)',
45
+ },
46
+ 'status.headless': { ru: 'Headless: {v}', en: 'Headless: {v}' },
47
+ 'status.debug': { ru: 'Debug: {v}', en: 'Debug: {v}' },
48
+ 'status.undo': { ru: 'Undo: {v}', en: 'Undo: {v}' },
49
+ 'status.checkpoint': { ru: 'Чекпойнты: {v}', en: 'Checkpoints: {v}' },
50
+ 'status.transcript': { ru: 'Транскрипт: {v}', en: 'Transcript: {v}' },
51
+ 'status.locale': { ru: 'Язык: {v}', en: 'Language: {v}' },
52
+ 'status.goal': { ru: 'Цель сессии: {v}', en: 'Session goal: {v}' },
53
+ 'status.tasks_summary': {
54
+ ru: 'задачи: {done}/{total}',
55
+ en: 'tasks: {done}/{total}',
56
+ },
57
+ 'tasks.title': { ru: 'Задачи агента:', en: 'Agent tasks:' },
58
+ 'tasks.empty': {
59
+ ru: 'Список задач пуст (агент ещё не вызывал TodoWrite).',
60
+ en: 'The task list is empty (the agent has not called TodoWrite yet).',
61
+ },
62
+ 'tasks.restored': {
63
+ ru: 'Восстановлен список задач: {done}/{total}',
64
+ en: 'Task list restored: {done}/{total}',
65
+ },
66
+ 'msg.working_dir': {
67
+ ru: 'Рабочая директория: {v}',
68
+ en: 'Working directory: {v}',
69
+ },
70
+ 'msg.transcript': { ru: 'Транскрипт: {v}', en: 'Transcript: {v}' },
71
+ 'msg.new_chat': { ru: 'Создаю новый чат...', en: 'Creating a new chat...' },
72
+ 'msg.new_chat_ok': { ru: 'Новый чат.', en: 'New chat.' },
73
+ 'msg.resuming': {
74
+ ru: 'Восстанавливаю сессию {id}...',
75
+ en: 'Restoring session {id}...',
76
+ },
77
+ 'msg.input_locked': {
78
+ ru: 'Идёт операция, ввод временно заблокирован…',
79
+ en: 'Operation in progress, input is temporarily locked…',
80
+ },
81
+ 'msg.opening_chat': {
82
+ ru: 'Открываю чат {id}...',
83
+ en: 'Opening chat {id}...',
84
+ },
85
+ 'msg.chat_opened': { ru: 'Чат открыт.', en: 'Chat opened.' },
86
+ 'msg.version': { ru: 'Версия: {v}', en: 'Version: {v}' },
87
+ 'msg.interactive': {
88
+ ru: 'Интерактивный режим. Введите задачу. Команды — /help. Выход — /exit.',
89
+ en: 'Interactive mode. Enter a task. Commands — /help. Exit — /exit.',
90
+ },
91
+ 'msg.first_login_hint': {
92
+ ru: 'Сохранённой сессии DeepSeek нет — при первом запросе потребуется вход (логин/пароль спросят в терминале или открой --headed).',
93
+ en: 'No saved DeepSeek session — the first task will need a sign-in (login/password are asked in the terminal, or use --headed).',
94
+ },
95
+ 'msg.first_hint': {
96
+ ru: 'Подсказка: «/» — список команд, Ctrl+R — поиск по истории, картинку можно вставить через Ctrl+Shift+V.',
97
+ en: 'Hint: "/" lists commands, Ctrl+R searches history, paste an image with Ctrl+Shift+V.',
98
+ },
99
+ 'msg.queue_hint': {
100
+ ru: 'Пока агент работает, можно печатать следующее сообщение — оно уйдёт в очередь (Enter — отправить, Esc — прервать).',
101
+ en: 'While the agent works you can type the next message — it goes to the queue (Enter — send, Esc — abort).',
102
+ },
103
+ 'msg.unknown_cmd': {
104
+ ru: 'Неизвестная команда: {v}. Набери /help.',
105
+ en: 'Unknown command: {v}. Type /help.',
106
+ },
107
+ 'msg.missing_args': {
108
+ ru: 'Не хватает обязательных аргументов: {v}.',
109
+ en: 'Missing required arguments: {v}.',
110
+ },
111
+ 'perm.ask': {
112
+ ru: '⚠ Запрос подтверждения: {tool} ({reason})',
113
+ en: '⚠ Approval required: {tool} ({reason})',
114
+ },
115
+ 'perm.confirm': {
116
+ ru: 'Разрешить выполнение?',
117
+ en: 'Allow this call?',
118
+ },
119
+ 'perm.allowed': {
120
+ ru: '✔ Разрешено оператором.',
121
+ en: '✔ Allowed by operator.',
122
+ },
123
+ 'perm.denied': {
124
+ ru: '✖ Отклонено оператором — вызов не выполнен.',
125
+ en: '✖ Denied by operator — the call was not run.',
126
+ },
127
+ 'msg.dev_only': {
128
+ ru: 'Команда {v} доступна только в dev-режиме (--dev или hotReload).',
129
+ en: 'The {v} command is only available in dev mode (--dev or hotReload).',
130
+ },
131
+ 'msg.bye': { ru: 'Выход.', en: 'Bye.' },
132
+ 'shell.empty': {
133
+ ru: 'После ! нужна команда, например !git status.',
134
+ en: 'A command is required after !, e.g. !git status.',
135
+ },
136
+ 'shell.running': {
137
+ ru: 'выполняю shell-команду...',
138
+ en: 'running shell command...',
139
+ },
140
+ 'msg.exit_summary': {
141
+ ru: 'Транскрипт: {transcript} · чат: {chat}',
142
+ en: 'Transcript: {transcript} · chat: {chat}',
143
+ },
144
+ 'msg.abort_gen': {
145
+ ru: '⏹ Esc — прерываю генерацию...',
146
+ en: '⏹ Esc — aborting generation...',
147
+ },
148
+ 'msg.abort_ctrlc': {
149
+ ru: '⏹ Ctrl+C — прерываю генерацию...',
150
+ en: '⏹ Ctrl+C — aborting generation...',
151
+ },
152
+ 'msg.queued': { ru: '📨 В очередь ({n}): ', en: '📨 Queued ({n}): ' },
153
+ // Shown ONCE per session, the first time a message is queued while the
154
+ // agent is working. It explains what happens (sent after the current task)
155
+ // and how to inspect/clear the queue, so the operator knows nothing is lost.
156
+ 'msg.queued_hint': {
157
+ ru: 'Сообщение в очереди — уйдёт после текущей задачи; /queue покажет и очистит.',
158
+ en: 'Message queued — it will be sent after the current task; /queue lists or clears it.',
159
+ },
160
+ 'msg.attached_image': {
161
+ ru: '🖼 Вложено изображение {marker} ({size}) — {path}',
162
+ en: '🖼 Attached image {marker} ({size}) — {path}',
163
+ },
164
+ 'msg.attached_file': {
165
+ ru: '📎 Вложен файл {marker} {name} ({size}) — {path}',
166
+ en: '📎 Attached file {marker} {name} ({size}) — {path}',
167
+ },
168
+ // B5: shown when `@path` references in a task were inlined as file contents.
169
+ 'msg.at_refs': {
170
+ ru: '📄 Встроено файлов по @-ссылкам: {n} —',
171
+ en: '📄 Inlined @-referenced files: {n} —',
172
+ },
173
+ 'msg.clip_empty': {
174
+ ru: '⚠ В буфере обмена нет картинки (проверено: {via}).',
175
+ en: '⚠ No image found in the clipboard (tried: {via}).',
176
+ },
177
+ 'msg.clip_hint': {
178
+ ru: ' Проще всего: вставьте путь к файлу (например tmp/pic.png) — файл приложится к сообщению. Для клипборда нужна утилита (Linux/X11 — xclip или xsel, Wayland — wl-clipboard; Windows — PowerShell, macOS — pngpaste).',
179
+ en: ' Easiest: paste a path to a file (e.g. tmp/pic.png) — it will be attached to the message. Clipboard paste needs a tool (Linux/X11 — xclip or xsel, Wayland — wl-clipboard; Windows — PowerShell, macOS — pngpaste).',
180
+ },
181
+ 'msg.clip_container': {
182
+ ru: ' Похоже, вы в контейнере/Dev Container: клипборд Windows отсюда недоступен. Вставьте путь к файлу (например tmp/pic.png) — он приложится к сообщению.',
183
+ en: ' Looks like a container/Dev Container: the Windows clipboard is not reachable from here. Paste a path to a file (e.g. tmp/pic.png) — it will be attached to the message.',
184
+ },
185
+ // Per-task summary parts (joined with "·" by index.ts). Split into separate
186
+ // keys so the tokens part can be omitted when the counter is unknown.
187
+ 'task_sum.dur': { ru: 'длительность: {dur}', en: 'duration: {dur}' },
188
+ 'task_sum.tools': { ru: 'инструментов: {n}', en: 'tools: {n}' },
189
+ 'task_sum.tokens': { ru: 'токенов: {n}', en: 'tokens: {n}' },
190
+ // Unit labels for the localized task duration (see formatDuration).
191
+ 'dur.h': { ru: 'ч', en: 'h' },
192
+ 'dur.m': { ru: 'м', en: 'm' },
193
+ 'dur.s': { ru: 'с', en: 's' },
194
+ 'diff.no_changes': { ru: '(нет изменений)', en: '(no changes)' },
195
+ 'diff.more_lines': {
196
+ ru: '... [{n} строк ещё, полный вывод — Bash git diff]',
197
+ en: '... [{n} more lines, use Bash git diff for the full output]',
198
+ },
199
+ 'context.title': {
200
+ ru: 'Загружено в промпт:',
201
+ en: 'Loaded into the prompt:',
202
+ },
203
+ 'context.system_prompt': {
204
+ ru: ' системный промпт: {n} символов',
205
+ en: ' system prompt: {n} chars',
206
+ },
207
+ 'context.agents': {
208
+ ru: 'AGENTS.md / инструкции:',
209
+ en: 'AGENTS.md / instructions:',
210
+ },
211
+ 'context.memory': {
212
+ ru: 'MEMORY.md:',
213
+ en: 'MEMORY.md:',
214
+ },
215
+ 'context.skills': {
216
+ ru: 'Скиллы:',
217
+ en: 'Skills:',
218
+ },
219
+ 'context.commands': {
220
+ ru: 'Кастомные команды:',
221
+ en: 'Custom commands:',
222
+ },
223
+ 'context.none': { ru: '(нет)', en: '(none)' },
224
+ 'context.near_full': {
225
+ ru: '⚠ Контекст заполнен на {pct}% — подумайте о /compact, чтобы сжать историю.',
226
+ en: '⚠ Context is {pct}% full — consider /compact to shrink the history.',
227
+ },
228
+ 'retry.none': {
229
+ ru: 'Нет последней задачи для повтора.',
230
+ en: 'No last task to retry.',
231
+ },
232
+ 'copy.none': {
233
+ ru: 'Нет ответа для копирования.',
234
+ en: 'No answer to copy.',
235
+ },
236
+ 'copy.done': {
237
+ ru: 'Скопировано в буфер обмена ({tool}).',
238
+ en: 'Copied to clipboard ({tool}).',
239
+ },
240
+ 'copy.failed': {
241
+ ru: 'Не удалось скопировать (нет {tool} или он недоступен).',
242
+ en: 'Could not copy ({tool} missing or unavailable).',
243
+ },
244
+ 'retry.running': { ru: 'Повторяю задачу…', en: 'Retrying the task...' },
245
+ 'rename.usage': {
246
+ ru: 'Использование: /rename <title>',
247
+ en: 'Usage: /rename <title>',
248
+ },
249
+ 'rename.done': {
250
+ ru: 'Сессия переименована: {v}',
251
+ en: 'Session renamed: {v}',
252
+ },
253
+ 'cost.title': { ru: 'Статистика сессии:', en: 'Session stats:' },
254
+ 'cost.context_known': {
255
+ ru: ' контекст: ~{n} токенов (DeepSeek accumulated_token_usage)',
256
+ en: ' context: ~{n} tokens (DeepSeek accumulated_token_usage)',
257
+ },
258
+ 'cost.context_unknown': {
259
+ ru: ' контекст: неизвестно (DeepSeek сообщит после первого ответа в чате)',
260
+ en: ' context: unknown (DeepSeek reports it after the first answer in a chat)',
261
+ },
262
+ 'cost.tasks': { ru: ' задач: {n}', en: ' tasks: {n}' },
263
+ 'cost.tool_calls': {
264
+ ru: ' вызовов инструментов: {n}',
265
+ en: ' tool calls: {n}',
266
+ },
267
+ 'cost.auto_compacts': { ru: ' авто-сжатий: {n}', en: ' auto-compacts: {n}' },
268
+ 'cost.by_tool': { ru: ' по инструментам:', en: ' by tool:' },
269
+ // T-D3: total time spent inside tools, then a top-N per-tool breakdown.
270
+ 'cost.by_time': {
271
+ ru: ' время в инструментах: {dur}; топ по времени:',
272
+ en: ' time in tools: {dur}; top by time:',
273
+ },
274
+ 'cost.duration': { ru: ' длительность: {dur}', en: ' duration: {dur}' },
275
+ 'cost.started': { ru: ' начало: {v}', en: ' started: {v}' },
276
+ 'cost.transcript': { ru: ' транскрипт: {v}', en: ' transcript: {v}' },
277
+ 'cost.off': { ru: '(выкл)', en: '(off)' },
278
+ 'undo.empty': { ru: 'История пуста.', en: 'History is empty.' },
279
+ 'undo.reverted': { ru: '↶ Откатили: {v}', en: '↶ Reverted: {v}' },
280
+ 'undo.restored': { ru: ' (восстановлено)', en: ' (restored)' },
281
+ 'undo.deleted': { ru: ' (удалено)', en: ' (deleted)' },
282
+ 'undo.failed': {
283
+ ru: 'Не удалось откатить: {v}',
284
+ en: 'Failed to revert: {v}',
285
+ },
286
+ 'undo.changed': { ru: 'изменён', en: 'changed' },
287
+ 'undo.created': { ru: 'создан', en: 'created' },
288
+ 'undo.reason_empty': { ru: 'история пуста', en: 'history is empty' },
289
+ 'undo.reason_disabled': {
290
+ ru: 'undo отключён в конфиге',
291
+ en: 'undo is disabled in the config',
292
+ },
293
+ 'rewind.empty': { ru: 'Чекпойнтов нет.', en: 'No checkpoints.' },
294
+ 'rewind.created': {
295
+ ru: '📸 Чекпойнт: {v}',
296
+ en: '📸 Checkpoint: {v}',
297
+ },
298
+ 'rewind.list_title': { ru: 'Чекпойнты:', en: 'Checkpoints:' },
299
+ 'rewind.reverted': {
300
+ ru: '↶ Откатили рабочее дерево к чекпойнту {v}',
301
+ en: '↶ Rolled the working tree back to checkpoint {v}',
302
+ },
303
+ 'rewind.backup': {
304
+ ru: 'Текущее состояние сохранено как чекпойнт {v}',
305
+ en: 'Current state saved as checkpoint {v}',
306
+ },
307
+ 'rewind.failed': {
308
+ ru: 'Не удалось откатить: {v}',
309
+ en: 'Failed to rewind: {v}',
310
+ },
311
+ 'rewind.reason_not_found': {
312
+ ru: 'чекпойнт не найден',
313
+ en: 'checkpoint not found',
314
+ },
315
+ 'rewind.reason_archive_missing': {
316
+ ru: 'архив чекпойнта отсутствует',
317
+ en: 'checkpoint archive is missing',
318
+ },
319
+ 'rewind.reason_extract_failed': {
320
+ ru: 'не удалось распаковать архив',
321
+ en: 'failed to unpack the archive',
322
+ },
323
+ 'rewind.reason_disabled': {
324
+ ru: 'чекпойнты отключены в конфиге',
325
+ en: 'checkpoints are disabled in the config',
326
+ },
327
+ 'rewind.confirm': {
328
+ ru: 'Откатить рабочее дерево к чекпойнту {v}? Текущее состояние будет сохранено как бэкап.',
329
+ en: 'Roll the working tree back to checkpoint {v}? The current state will be saved as a backup.',
330
+ },
331
+ 'rewind.cancelled': { ru: 'Отменено.', en: 'Cancelled.' },
332
+ 'rewind.label_backup': { ru: 'бэкап', en: 'backup' },
333
+ 'dom.saved': { ru: 'HTML сохранён: {v}', en: 'HTML saved: {v}' },
334
+ 'dom.selectors': { ru: 'Селекторы:', en: 'Selectors:' },
335
+ 'dom.save_error': {
336
+ ru: 'Не удалось сохранить DOM:',
337
+ en: 'Failed to save DOM:',
338
+ },
339
+ 'cd.outside': {
340
+ ru: 'Нельзя выйти за пределы: {v}',
341
+ en: 'Cannot leave the sandbox: {v}',
342
+ },
343
+ 'cd.not_dir': { ru: 'Не директория: {v}', en: 'Not a directory: {v}' },
344
+ 'cd.already': { ru: 'Уже здесь.', en: 'Already here.' },
345
+ 'cd.left_review': {
346
+ ru: 'Вышел из режима ревью (/cd).',
347
+ en: 'Left review mode (/cd).',
348
+ },
349
+ 'cd.changed': { ru: 'Рабочая директория: {v}', en: 'Working directory: {v}' },
350
+ 'cd.failed': {
351
+ ru: 'Не удалось перейти: {v}',
352
+ en: 'Failed to change directory: {v}',
353
+ },
354
+ 'reload.auto_partial': {
355
+ ru: '⚠ авто-reload: часть модулей не загрузилась, работаю на прежней версии:',
356
+ en: '⚠ auto-reload: some modules failed, using previous version:',
357
+ },
358
+ 'reload.browser_restart': {
359
+ ru: '⚠ browser.ts изменился, но он НЕ перезагружается на лету (в нём Playwright-контекст). Перезапусти zames, иначе изменения не применятся.',
360
+ en: '⚠ browser.ts changed, but it is NOT hot-reloaded (it owns the Playwright context). Restart zames or the change will not apply.',
361
+ },
362
+ };
@@ -0,0 +1,199 @@
1
+ // Config menu and config command messages.
2
+ export const configMessages = {
3
+ 'cfg.group.ui': { ru: 'Интерфейс', en: 'Interface' },
4
+ 'cfg.group.agent': { ru: 'Агент', en: 'Agent' },
5
+ 'cfg.group.undo': { ru: 'Откат (undo)', en: 'Undo' },
6
+ 'cfg.group.checkpoint': { ru: 'Чекпойнты', en: 'Checkpoints' },
7
+ 'cfg.group.transcript': { ru: 'Транскрипт', en: 'Transcript' },
8
+ 'cfg.group.browser': { ru: 'Браузер / DeepSeek', en: 'Browser / DeepSeek' },
9
+ 'cfg.f.ui_contextLimit': {
10
+ ru: 'Размер контекста (токены)',
11
+ en: 'Context window (tokens)',
12
+ },
13
+ 'cfg.f.ui_locale': {
14
+ ru: 'Язык интерфейса и ответов агента',
15
+ en: 'Interface and agent reply language',
16
+ },
17
+ 'cfg.f.ui_answerWidth': {
18
+ ru: 'Максимальная ширина ответа в колонках (0 — авто, до 100)',
19
+ en: 'Max answer width in columns (0 = auto, capped at 100)',
20
+ },
21
+ 'cfg.f.maxIterations': {
22
+ ru: 'Лимит итераций на задачу',
23
+ en: 'Max agent loop iterations per task',
24
+ },
25
+ 'cfg.f.headless': {
26
+ ru: 'Браузер без UI (нужен перезапуск)',
27
+ en: 'Headless browser (needs restart)',
28
+ },
29
+ 'cfg.f.debug': { ru: 'Подробный лог', en: 'Verbose debug logging' },
30
+ 'cfg.f.hotReload': {
31
+ ru: 'Авто-перечитывание модулей перед задачей',
32
+ en: 'Auto-reload logic modules before each task',
33
+ },
34
+ 'cfg.f.undo_enabled': {
35
+ ru: 'Включить бэкапы для отката',
36
+ en: 'Enable undo backups',
37
+ },
38
+ 'cfg.f.undo_maxBackups': {
39
+ ru: 'Сколько бэкапов хранить',
40
+ en: 'Max undo backups kept',
41
+ },
42
+ 'cfg.f.checkpoint_enabled': {
43
+ ru: 'Чекпойнт в начале каждой задачи (для /rewind)',
44
+ en: 'Checkpoint at the start of each task (for /rewind)',
45
+ },
46
+ 'cfg.f.checkpoint_maxBackups': {
47
+ ru: 'Сколько чекпойнтов хранить',
48
+ en: 'How many checkpoints to keep',
49
+ },
50
+ 'cfg.f.transcript_enabled': {
51
+ ru: 'Вести транскрипт',
52
+ en: 'Write transcript log',
53
+ },
54
+ 'cfg.f.browser_answerTimeoutMs': {
55
+ ru: 'Ждать ответ, мс',
56
+ en: 'Wait for an answer, ms',
57
+ },
58
+ 'cfg.f.browser_askRetries': {
59
+ ru: 'Число повторов ask()',
60
+ en: 'ask() retry count',
61
+ },
62
+ 'cfg.f.browser_stabilityChecks': {
63
+ ru: 'Проверки стабильности ответа',
64
+ en: 'Answer stability checks',
65
+ },
66
+ 'cfg.f.browser_stabilityDelayMs': {
67
+ ru: 'Пауза между проверками, мс',
68
+ en: 'Delay between stability checks, ms',
69
+ },
70
+ 'cfg.f.browser_minSendIntervalMs': {
71
+ ru: 'Мин. пауза между отправками, мс',
72
+ en: 'Min pause between sends, ms',
73
+ },
74
+ 'cfg.f.browser_thinkingExtraMs': {
75
+ ru: 'Доп. пауза в режиме размышления, мс',
76
+ en: 'Extra pause in thinking mode, ms',
77
+ },
78
+ 'cfg.f.browser_rateLimitWaitMs': {
79
+ ru: 'Пауза при лимите частоты, мс',
80
+ en: 'Wait on rate limit, ms',
81
+ },
82
+ 'cfg.f.browser_maxRateLimitRetries': {
83
+ ru: 'Число повторов при лимите',
84
+ en: 'Rate-limit retry count',
85
+ },
86
+ 'cfg.f.browser_maxIncompleteRetries': {
87
+ ru: 'Повторы при обрыве ответа (Continue)',
88
+ en: 'Retries when the answer is truncated (Continue)',
89
+ },
90
+ 'cfg.f.browser_incompleteWaitMs': {
91
+ ru: 'Пауза перед повтором после обрыва, мс',
92
+ en: 'Wait before retrying a truncated turn, ms',
93
+ },
94
+ 'cfg.f.browser_autoContinue': {
95
+ ru: 'Автонажатие кнопки Continue (режим размышления)',
96
+ en: 'Auto-click Continue (reasoning mode)',
97
+ },
98
+ 'cfg.f.browser_autoCompact': {
99
+ ru: 'Авто-сжатие контекста',
100
+ en: 'Auto-compact the context',
101
+ },
102
+ 'cfg.f.browser_autoCompactPct': {
103
+ ru: 'Порог авто-сжатия (%)',
104
+ en: 'Auto-compact threshold (%)',
105
+ },
106
+ 'cfg.f.browser_askDeadlineMs': {
107
+ ru: 'Watchdog-таймаут ask (мс)',
108
+ en: 'ask() watchdog deadline (ms)',
109
+ },
110
+ 'cfg.f.browser_maxAfterToolRetries': {
111
+ ru: 'Повторов после таймаута',
112
+ en: 'Retries after a timeout',
113
+ },
114
+ 'cfg.f.browser_continueMinGapMs': {
115
+ ru: 'Мин. пауза перед нажатием Continue, мс',
116
+ en: 'Min gap before a Continue click, ms',
117
+ },
118
+ 'cfg.f.browser_resendPromptOnResume': {
119
+ ru: 'Пересылать системный промпт при возобновлении чата',
120
+ en: 'Resend the system prompt on chat resume',
121
+ },
122
+ 'cfg.f.browser_deepThinking': {
123
+ ru: 'Глубокое мышление (долго; размышления не выводятся)',
124
+ en: 'Deep thinking (slow; reasoning is hidden)',
125
+ },
126
+ 'cfg.f.browser_webSearch': {
127
+ ru: 'Умный поиск в интернете',
128
+ en: 'Smart web search',
129
+ },
130
+ 'cfg.f.browser_authUsername': {
131
+ ru: 'Логин DeepSeek для авто-входа',
132
+ en: 'DeepSeek login for auto sign-in',
133
+ },
134
+ 'cfg.f.browser_authPassword': {
135
+ ru: 'Пароль DeepSeek для авто-входа',
136
+ en: 'DeepSeek password for auto sign-in',
137
+ },
138
+ 'cfg.f.browser_authSaveSession': {
139
+ ru: 'Сохранять сессию входа в профиле',
140
+ en: 'Persist the login session in the profile',
141
+ },
142
+ 'cfg.title': { ru: 'Настройки zames', en: 'zames settings' },
143
+ 'cfg.current': { ru: 'Текущий конфиг:', en: 'Current config:' },
144
+ 'cfg.usage': {
145
+ ru: 'Использование: /config [menu | list | get <путь> | set <путь> <значение> | reset <путь> | path | lang <ru|en>]',
146
+ en: 'Usage: /config [menu | list | get <path> | set <path> <value> | reset <path> | path | lang <ru|en>]',
147
+ },
148
+ 'cfg.saved': {
149
+ ru: 'Сохранено: {v} = {value} ({file})',
150
+ en: 'Saved: {v} = {value} ({file})',
151
+ },
152
+ 'cfg.reset': { ru: 'Сброшено к дефолту: {v}', en: 'Reset to default: {v}' },
153
+ 'cfg.value': { ru: '{v} = {value}', en: '{v} = {value}' },
154
+ 'cfg.unknown_key': {
155
+ ru: 'Неизвестный параметр: {v}',
156
+ en: 'Unknown setting: {v}',
157
+ },
158
+ 'cfg.bad_value': {
159
+ ru: 'Неверное значение для {v}: ожидалось {type}',
160
+ en: 'Invalid value for {v}: expected {type}',
161
+ },
162
+ 'cfg.range_hint': {
163
+ ru: 'число от {min} до {max}',
164
+ en: 'a number from {min} to {max}',
165
+ },
166
+ 'cfg.write_error': {
167
+ ru: 'Не удалось записать конфиг: {v}',
168
+ en: 'Failed to write config: {v}',
169
+ },
170
+ 'cfg.paths': {
171
+ ru: 'Конфиг (глобальный): {global}\nКонфиг (проект): {project}',
172
+ en: 'Config (global): {global}\nConfig (project): {project}',
173
+ },
174
+ 'cfg.keys': { ru: 'Доступные параметры:', en: 'Available settings:' },
175
+ 'cfg.lang_set': {
176
+ ru: 'Язык переключён на {v}.',
177
+ en: 'Language switched to {v}.',
178
+ },
179
+ 'cfg.lang_usage': {
180
+ ru: 'Использование: /config lang <ru|en>',
181
+ en: 'Usage: /config lang <ru|en>',
182
+ },
183
+ 'cfg.scope_current': {
184
+ ru: 'Запись конфига: {v} ({file})',
185
+ en: 'Config write scope: {v} ({file})',
186
+ },
187
+ 'cfg.scope_usage': {
188
+ ru: 'Использование: /config scope <project|home>. project = .zamesrc.json (в git), home = ~/.zames/. Для личных настроек выбери home, чтобы не коммитить их.',
189
+ en: 'Usage: /config scope <project|home>. project = .zamesrc.json (committed), home = ~/.zames/. Use home for personal settings so they are not committed.',
190
+ },
191
+ 'cfg.scope_set': {
192
+ ru: 'Запись конфига: {v} ({file})',
193
+ en: 'Config write scope: {v} ({file})',
194
+ },
195
+ 'cfg.scope_bad': {
196
+ ru: 'Неизвестный scope: {v}. Используй project или home.',
197
+ en: 'Unknown scope: {v}. Use project or home.',
198
+ },
199
+ };