zames_pro 2.82.140 → 2.82.141

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.
@@ -6,13 +6,18 @@ export const doctorMessages = {
6
6
  'doctor.not_repo': { ru: 'не репозиторий', en: 'not a repository' },
7
7
  'doctor.loaded': { ru: 'загружен', en: 'loaded' },
8
8
  'doctor.error': { ru: 'ошибка: {v}', en: 'error: {v}' },
9
- 'doctor.unknown': { ru: 'неизвестно', en: 'unknown' },
10
9
  'doctor.bundled': { ru: 'встроенный chromium', en: 'bundled chromium' },
11
10
  'doctor.auth_saved': {
12
- ru: 'сессия сохранена (авто-вход готов)',
13
- en: 'session saved (auto re-login ready)',
11
+ ru: 'сессия сохранена — авто-вход готов',
12
+ en: 'session saved — auto re-login ready',
13
+ },
14
+ // Says what the row checks: the per-provider marker written AFTER a sign-in.
15
+ // A profile with a live cookie but no marker also lands here, so "no saved
16
+ // session" would be wrong (and the fix is to open the chat, not to sign in).
17
+ 'doctor.auth_none': {
18
+ ru: 'нет отметки о входе (отметка пишется после входа этого провайдера)',
19
+ en: 'no sign-in marker (written after this provider signs in)',
14
20
  },
15
- 'doctor.auth_none': { ru: 'нет сохранённой сессии', en: 'no saved session' },
16
21
  'doctor.clipboard_none': {
17
22
  ru: 'инструмент не найден (вставка картинок отключена)',
18
23
  en: 'no tool found (image paste disabled)',
@@ -110,7 +115,6 @@ export const doctorMessages = {
110
115
  ru: 'Перезагружено модулей: {n}. Браузер и чат не тронуты.',
111
116
  en: 'Modules reloaded: {n}. Browser and chat untouched.',
112
117
  },
113
- 'msg.not_dir': { ru: 'Не директория: {v}', en: 'Not a directory: {v}' },
114
118
  'prompt.review': { ru: 'REVIEW', en: 'REVIEW' },
115
119
  'msg.workdir_error': {
116
120
  ru: 'Не удалось определить рабочую директорию:',
package/dist/i18n/glm.js CHANGED
@@ -4,8 +4,8 @@
4
4
  // `model.*` / `provider.*` keys live in i18n/help.ts and i18n/qwen.ts.
5
5
  export const glmMessages = {
6
6
  'glm.guest_mode': {
7
- ru: 'GLM: вход не выполнен, работаю гостем (сообщения может блокировать капча). Войдите через /provider login или запустите с --headed.',
8
- en: 'GLM: not signed in, running as a guest (a captcha may block messages). Log in via /provider login or launch with --headed.',
7
+ ru: '✖ GLM: гостевой лимит z.ai исчерпан (без входа доступно лишь несколько сообщений), сообщение не отправлено. Войдите через /provider login или запустите с --headed.',
8
+ en: '✖ GLM: the z.ai guest limit is exhausted (a signed-out visitor gets only a few messages), the message was not sent. Log in via /provider login or launch with --headed.',
9
9
  },
10
10
  'glm.login_ok': {
11
11
  ru: 'GLM: вход выполнен.',
package/dist/i18n/help.js CHANGED
@@ -35,17 +35,17 @@ export const helpMessages = {
35
35
  en: 'headless browser (default)',
36
36
  },
37
37
  'help.opt.headed': {
38
- ru: 'показать окно браузера (отладка/вход)',
39
- en: 'show the browser window (debug/sign-in)',
38
+ ru: 'показать окно браузера (отладка/вход; GLM и так работает с окном)',
39
+ en: 'show the browser window (debug/sign-in; GLM already runs headed)',
40
40
  },
41
41
  'help.opt.provider': {
42
- ru: 'выбрать провайдера чата (deepseek | qwen | glm) на этот запуск',
43
- en: 'select the chat provider (deepseek | qwen | glm) for this run',
42
+ ru: 'выбрать провайдера чата на этот запуск (deepseek | qwen | glm; сохраняется в конфиг)',
43
+ en: 'select the chat provider for this run (deepseek | qwen | glm; saved to the config)',
44
44
  },
45
45
  'help.opt.debug': { ru: 'подробный лог', en: 'verbose log' },
46
46
  'help.opt.dev': {
47
- ru: 'режим разработки: авто-перечитывание модулей',
48
- en: 'dev mode: auto-reload modules',
47
+ ru: 'режим разработки: dev-команды, BACKLOG-заметки в промпте и авто-перечитывание модулей',
48
+ en: 'dev mode: dev-only commands, BACKLOG notes in the prompt and module auto-reload',
49
49
  },
50
50
  'help.opt.version': { ru: 'показать версию', en: 'show version' },
51
51
  'help.opt.no_color': {
@@ -62,52 +62,52 @@ export const helpMessages = {
62
62
  en: 'type + Enter queue a message (sent after the current task)',
63
63
  },
64
64
  'help.key.history': {
65
- ru: '↑ / ↓ история введённых сообщений',
66
- en: '↑ / ↓ input history',
65
+ ru: '↑ / ↓ история введённых сообщений (сохраняется в ~/.zames/history.json)',
66
+ en: '↑ / ↓ input history (saved to ~/.zames/history.json)',
67
67
  },
68
68
  'help.key.search': {
69
- ru: 'Ctrl+R поиск по истории (обратный)',
70
- en: 'Ctrl+R reverse-search the history',
69
+ ru: 'Ctrl+R поиск по истории ввода (обратный; Ctrl+R — дальше, Enter — принять, Esc — отмена)',
70
+ en: 'Ctrl+R reverse search the input history (Ctrl+R next, Enter accept, Esc cancel)',
71
71
  },
72
72
  'help.key.undo': {
73
73
  ru: 'Ctrl+_ отменить правку в строке ввода',
74
74
  en: 'Ctrl+_ undo the last edit in the input line',
75
75
  },
76
76
  'help.key.words': {
77
- ru: 'Ctrl+← / Ctrl+→ перемещение по словам',
78
- en: 'Ctrl+← / Ctrl+→ move by words',
77
+ ru: 'Ctrl+← / Ctrl+→ перемещение по словам (Ctrl+Delete / Alt+Delete — удалить слово справа)',
78
+ en: 'Ctrl+← / Ctrl+→ move by words (Ctrl+Delete / Alt+Delete — delete the word right)',
79
+ },
80
+ 'help.key.clear_screen': {
81
+ ru: 'Ctrl+L очистить экран и перерисовать блок ввода',
82
+ en: 'Ctrl+L clear the screen and repaint the input block',
79
83
  },
80
84
  'help.key.slash': {
81
- ru: '/ + Tab подсказка и автодополнение slash-команд (Ctrl+N/P — вверх/вниз)',
82
- en: '/ + Tab slash-command hints and completion (Ctrl+N/P — up/down)',
85
+ ru: '/ + Tab подсказка и автодополнение slash-команд (Ctrl+N/P — выбор)',
86
+ en: '/ + Tab slash-command hints and completion (Ctrl+N/P — select)',
83
87
  },
84
88
  'help.key.newline': {
85
- ru: 'Ctrl+J / Ctrl+Enter новая строка (Shift+Enter в терминалах с поддержкой)',
86
- en: 'Ctrl+J / Ctrl+Enter new line (Shift+Enter in capable terminals)',
87
- },
88
- 'help.key.backslash': {
89
- ru: '\\ + Enter тоже новая строка',
90
- en: '\\ + Enter also a new line',
89
+ ru: '\\ + Enter / Ctrl+J новая строка (Enter убирает этот \\; Ctrl+Enter и Shift+Enter — только в терминалах с kitty-протоколом)',
90
+ en: '\\ + Enter / Ctrl+J new line (Enter drops that \\; Ctrl+Enter and Shift+Enter only in terminals with the kitty protocol)',
91
91
  },
92
92
  'help.key.attach': {
93
- ru: 'Ctrl+Shift+V картинки вставить изображение/файл (сохранится в tmp)',
94
- en: 'Ctrl+Shift+V image paste an image/file (saved to tmp)',
93
+ ru: 'Ctrl+V / пустая вставка картинку/файл из буфера обмена в <project>/tmp (вставляется маркер)',
94
+ en: 'Ctrl+V / empty paste an image/file from the clipboard into <project>/tmp (a marker is inserted)',
95
95
  },
96
96
  'help.key.esc': {
97
- ru: 'Esc, Ctrl+C Esc — прервать генерацию; Ctrl+C — прервать инструмент, второй раз — весь прогон',
98
- en: 'Esc, Ctrl+C Esc — abort generation; Ctrl+C — abort the tool, twice — the whole run',
97
+ ru: 'Esc, Ctrl+C Esc — прервать генерацию; Ctrl+C — прервать инструмент, второй раз (в 2с) — весь прогон; без задачи — выход',
98
+ en: 'Esc, Ctrl+C Esc — abort generation; Ctrl+C — abort the tool, twice (within 2s) — the whole run; idle — exit',
99
99
  },
100
100
  'help.key.scroll': {
101
- ru: 'PgUp / PgDn вверх/вниз по диалогу (Home/End — в начало/конец) [full-screen]',
102
- en: 'PgUp / PgDn up/down the dialog (Home/End — top/bottom) [full-screen]',
101
+ ru: 'колесо / PgUp / PgDn прокрутка диалога (колесо — при ui.mouseScroll=on, умолч.; Home/End — в начало/конец при пустом вводе) [full-screen]',
102
+ en: 'wheel / PgUp / PgDn scroll the dialog (the wheel needs ui.mouseScroll=on, the default; Home/End — top/bottom with an empty input) [full-screen]',
103
103
  },
104
104
  'help.key.wheel': {
105
105
  ru: 'ui.mouseScroll on (умолч.) — колесо скроллит диалог (выделение Shift); off — выделение мышью',
106
106
  en: 'ui.mouseScroll on (default) — wheel scrolls the dialog (select: Shift); off — select with the mouse',
107
107
  },
108
108
  'help.key.bang': {
109
- ru: '!команда выполнить shell-команду напрямую (мимо модели)',
110
- en: '!command run a shell command directly (bypass the model)',
109
+ ru: '!команда выполнить shell-команду напрямую, без модели (вывод в транскрипт)',
110
+ en: '!command run a shell command directly, no model (output goes to the transcript)',
111
111
  },
112
112
  'help.commands': { ru: 'Команды:', en: 'Commands:' },
113
113
  'help.sec.session': { ru: 'Сессия', en: 'Session' },
@@ -122,105 +122,108 @@ export const helpMessages = {
122
122
  en: '/new, /clear new chat (reset context)',
123
123
  },
124
124
  'help.cmd.sessions': {
125
- ru: '/sessions [фильтр] список сохранённых сессий (можно фильтровать)',
126
- en: '/sessions [filter] list saved sessions (optionally filtered)',
125
+ ru: '/sessions [фильтр] сохранённые сессии: фильтр по заголовку или каталогу (в TUI — выбор и открытие)',
126
+ en: '/sessions [filter] saved sessions: filter by title or workdir (the TUI opens the pick list)',
127
127
  },
128
128
  'help.cmd.resume_id': {
129
- ru: '/resume-id <id> восстановить сессию по полному id',
130
- en: '/resume-id <id> resume a session by full id',
129
+ ru: '/resume-id <id> открыть сессию по полному id и напечатать диалог',
130
+ en: '/resume-id <id> open a session by full id and print its dialogue',
131
131
  },
132
132
  'help.cmd.chats': {
133
- ru: '/chats [фильтр] список последних чатов провайдера',
134
- en: '/chats [filter] recent chats of the active provider',
133
+ ru: '/chats [фильтр] последние чаты провайдера (в TUI — выбор и открытие, с диалогом)',
134
+ en: '/chats [filter] recent chats of the active provider (the TUI opens the pick list and prints the dialogue)',
135
135
  },
136
136
  'help.cmd.last': {
137
- ru: '/last открыть последний чат этого каталога',
138
- en: '/last open the last chat of this directory',
137
+ ru: '/last открыть последний чат этого каталога и напечатать диалог',
138
+ en: "/last open this directory's last chat and print its dialogue",
139
139
  },
140
140
  'help.cmd.chat': {
141
- ru: '/chat показать текущий chat id',
142
- en: '/chat show current chat id',
141
+ ru: '/chat показать текущий chat id и его URL',
142
+ en: '/chat show the current chat id and its URL',
143
143
  },
144
144
  'help.cmd.cd': {
145
- ru: '/cd <path> сменить рабочую директорию',
146
- en: '/cd <path> change working directory',
145
+ ru: '/cd <path> сменить рабочую директорию (без аргумента — вернуться в корень; следующая задача начнёт новый чат)',
146
+ en: '/cd <path> change the working directory (no argument — back to the root; the next task starts a fresh chat)',
147
147
  },
148
148
  'help.cmd.pwd': {
149
149
  ru: '/pwd текущая директория',
150
150
  en: '/pwd current directory',
151
151
  },
152
152
  'help.cmd.status': {
153
- ru: '/status состояние сессии',
154
- en: '/status session state',
153
+ ru: '/status состояние сессии: каталог, чат, лимиты, пауза, флаги, MCP, токены',
154
+ en: '/status session state: dir, chat, limits, pause, toggles, MCP, tokens',
155
155
  },
156
156
  'help.cmd.reload': {
157
- ru: '/reload перечитать модули логики без перезапуска',
158
- en: '/reload hot-reload logic modules',
157
+ ru: '/reload перечитать модули логики (browser.ts и login — только после перезапуска)',
158
+ en: '/reload hot-reload logic modules (browser.ts and login need a restart)',
159
159
  },
160
160
  'help.cmd.undo': {
161
161
  ru: '/undo откатить последнюю запись/правку',
162
162
  en: '/undo revert the last write/edit',
163
163
  },
164
164
  'help.cmd.undo_list': {
165
- ru: '/undo-list список того, что можно откатить',
166
- en: '/undo-list list revertable changes',
165
+ ru: '/undo-list (/history) список того, что можно откатить',
166
+ en: '/undo-list (/history) list revertable changes',
167
167
  },
168
168
  'help.cmd.rewind': {
169
- ru: '/rewind [n] откатить рабочее дерево к чекпойнту',
170
- en: '/rewind [n] roll the working tree back to a checkpoint',
169
+ ru: '/rewind [n|<штамп>] [--yes] откатить рабочее дерево к чекпойнту (без аргумента — самая свежая; спросит подтверждение, --yes — без вопроса для скриптов)',
170
+ en: '/rewind [n|stamp] [--yes] roll the working tree back to a checkpoint (no argument = the newest; asks first, --yes skips the question for scripts)',
171
171
  },
172
172
  'help.cmd.rewind_list': {
173
- ru: '/rewind-list список чекпойнтов',
174
- en: '/rewind-list list checkpoints',
173
+ ru: '/rewind-list (/checkpoints) список чекпойнтов (штамп и каталог)',
174
+ en: '/rewind-list (/checkpoints) list checkpoints (stamp and directory)',
175
175
  },
176
176
  'help.cmd.transcript': {
177
177
  ru: '/transcript путь к файлу транскрипта',
178
178
  en: '/transcript transcript file path',
179
179
  },
180
180
  'help.cmd.diff': {
181
- ru: '/diff [--staged] показать git diff',
182
- en: '/diff [--staged] show working tree git diff',
181
+ ru: '/diff [--staged] показать git diff (--staged — изменения в индексе)',
182
+ en: '/diff [--staged] show git diff (--staged — staged changes)',
183
183
  },
184
184
  'help.cmd.diffstat': {
185
- ru: '/diffstat сводка изменений (git diff --stat)',
186
- en: '/diffstat change summary (git diff --stat)',
185
+ ru: '/diffstat [--staged] сводка изменений (git diff --stat)',
186
+ en: '/diffstat [--staged] change summary (git diff --stat)',
187
187
  },
188
188
  'help.cmd.retry': {
189
- ru: '/retry повторить последнюю задачу в этом чате',
190
- en: '/retry resend the last task into this chat',
189
+ ru: '/retry повторить последнюю задачу в этом чате (тот же чат, промпт не пересылается)',
190
+ en: '/retry resend the last task into this chat (same chat, no prompt resend)',
191
191
  },
192
192
  'help.cmd.rename': {
193
- ru: '/rename <title> задать имя текущей сессии',
194
- en: '/rename <title> set the current session title',
193
+ ru: '/rename <title> задать имя сессии в zames (чат на сайте не переименовывается)',
194
+ en: '/rename <title> set the session title in zames (the web chat is not renamed)',
195
195
  },
196
196
  'help.cmd.context': {
197
- ru: '/context что загружено в промпт (AGENTS/MEMORY/skills/commands)',
198
- en: '/context what is loaded into the prompt (AGENTS/MEMORY/skills/commands)',
197
+ ru: '/context что загружено в промпт (AGENTS/MEMORY/skills/commands), размеры и объём промпта',
198
+ en: '/context what the prompt loads (AGENTS/MEMORY/skills/commands), their sizes and the prompt size',
199
199
  },
200
200
  'help.cmd.copy': {
201
- ru: '/copy скопировать последний ответ в буфер обмена',
202
- en: '/copy copy the last answer to the clipboard',
201
+ ru: '/copy скопировать последний ответ в буфер обмена (нужна утилита: wl-copy/xclip/xsel, pbcopy, clip)',
202
+ en: '/copy copy the last answer to the clipboard (needs a clipboard tool: wl-copy/xclip/xsel, pbcopy, clip)',
203
+ },
204
+ 'help.cmd.cost': {
205
+ ru: '/cost (/usage) статистика сессии: задачи, инструменты, время, контекст',
206
+ en: '/cost (/usage) session stats: tasks, tools, time, context',
203
207
  },
204
- 'help.cmd.cost': { ru: '/cost статистика сессии', en: '/cost session stats' },
205
208
  'help.cmd.limits': {
206
- ru: '/limits телеметрия отправок и текущая пауза',
207
- en: '/limits send telemetry and the current pause',
209
+ ru: '/limits статистика отправок, лимитов и текущая пауза',
210
+ en: '/limits send, rate-limit and current-pause stats',
208
211
  },
209
212
  'help.cmd.export': {
210
- ru: '/export [file] выгрузить сессию в Markdown',
211
- en: '/export [file] export the session to Markdown',
213
+ ru: '/export [file] выгрузить сессию в Markdown (по умолчанию zames-export-<время>.md)',
214
+ en: '/export [file] export the session to Markdown (default zames-export-<stamp>.md)',
212
215
  },
213
216
  'help.cmd.doctor': {
214
- ru: '/doctor диагностика установки и конфига',
215
- en: '/doctor diagnose install and config',
217
+ ru: '/doctor диагностика: node, git, конфиг, браузер, буфер обмена, MCP, провайдер',
218
+ en: '/doctor diagnose node, git, config, browser, clipboard, MCP and the provider',
216
219
  },
217
220
  'help.cmd.add_dir': {
218
- ru: '/add-dir <path> проверить директорию',
219
- en: '/add-dir <path> validate a directory',
221
+ ru: '/add-dir <path> проверить директорию (только проверка — песочницу не меняет)',
222
+ en: '/add-dir <path> validate a directory (check only — the sandbox is unchanged)',
220
223
  },
221
224
  'help.cmd.review': {
222
- ru: '/review [focus] ревью незакоммиченных изменений',
223
- en: '/review [focus] review uncommitted changes',
225
+ ru: '/review [фокус] [--staged] ревью изменений агентом (без правок; --staged — индекс)',
226
+ en: '/review [focus] [--staged] agent review of the changes (no edits; --staged — the index)',
224
227
  },
225
228
  'help.cmd.improve': {
226
229
  ru: '/improve [id] взять следующий пункт BACKLOG и довести до тестов',
@@ -247,8 +250,8 @@ export const helpMessages = {
247
250
  en: 'BACKLOG collapsed: {n} archived block(s) removed.',
248
251
  },
249
252
  'help.cmd.backlog': {
250
- ru: '/backlog <текст> записать идею в BACKLOG.md',
251
- en: '/backlog <text> record an idea in BACKLOG.md',
253
+ ru: '/backlog <текст> записать идею в BACKLOG.md (collapse — свернуть архив)',
254
+ en: '/backlog <text> record an idea in BACKLOG.md (collapse — prune archive)',
252
255
  },
253
256
  'backlog.usage': {
254
257
  ru: 'Использование: /backlog <текст идеи>',
@@ -271,60 +274,63 @@ export const helpMessages = {
271
274
  en: 'Nothing to collapse: there are no archived blocks.',
272
275
  },
273
276
  'help.cmd.compact': {
274
- ru: '/compact сжать историю и открыть новый чат с резюме',
275
- en: '/compact compact the history and open a new chat with the summary',
277
+ ru: '/compact сжать историю в резюме и продолжить в НОВОМ чате (старый остаётся)',
278
+ en: '/compact summarize the history and continue in a NEW chat (the old one stays)',
276
279
  },
277
280
  'help.cmd.queue': {
278
- ru: '/queue [clear] показать/очистить очередь сообщений',
279
- en: '/queue [clear] list/clear the pending message queue',
281
+ ru: '/queue [list|ls|clear|c|clean] очередь сообщений, ждущих отправки: показать (list/ls) или очистить (clear/c/clean); можно во время работы',
282
+ en: '/queue [list|ls|clear|c|clean] messages waiting to be sent: list (list/ls) or clear (clear/c/clean); works while the agent is busy',
280
283
  },
281
284
  'help.cmd.tasks': {
282
- ru: '/tasks список задач агента (TodoWrite)',
283
- en: '/tasks the agent task list (TodoWrite)',
285
+ ru: '/tasks текущий чек-лист агента (TodoWrite): статусы шагов (можно во время работы)',
286
+ en: "/tasks the agent's current checklist (TodoWrite): step statuses (works while the agent is busy)",
284
287
  },
285
288
  'help.cmd.thinking': {
286
- ru: '/thinking [on|off] включить/выключить режим размышления (можно во время работы)',
287
- en: '/thinking [on|off] toggle Deep thinking (works while the agent is busy)',
289
+ ru: '/thinking [on|off] режим размышления: DeepSeek/Qwen — тумблер, GLM — всегда включён (можно во время работы)',
290
+ en: '/thinking [on|off] reasoning mode: a toggle on DeepSeek/Qwen, always on for GLM (works while busy)',
288
291
  },
289
292
  'help.cmd.web': {
290
- ru: '/web [on|off] включить/выключить поиск в интернете (можно во время работы)',
291
- en: '/web [on|off] toggle Smart search (works while the agent is busy)',
293
+ ru: '/web [on|off] (также /websearch) поиск в интернете: DeepSeek — «Smart search», Qwen — пункт «Web search» (можно во время работы)',
294
+ en: '/web [on|off] (also /websearch) web search: DeepSeek "Smart search", Qwen the "Web search" menu item (works while busy)',
292
295
  },
293
296
  'help.cmd.goal': {
294
- ru: '/goal <условие> задать условие завершения; агент работает, пока оно не выполнено (снимается автоматически)',
295
- en: '/goal <condition> set a completion condition; the agent works until it is met (auto-cleared)',
297
+ ru: '/goal <условие> задать цель (работает, пока не выполнена; clear/off — снять, без аргумента или on — показать)',
298
+ en: '/goal <condition> set the goal (runs until met; clear/off — drop, no argument or on — show it)',
296
299
  },
297
300
  'help.cmd.plan': {
298
- ru: '/plan [on|off] режим плана: только чтение, без правок и команд',
299
- en: '/plan [on|off] plan mode: read-only, no edits or commands',
301
+ ru: '/plan [on|off] режим плана (чтение без правок); без аргумента — переключить',
302
+ en: '/plan [on|off] plan mode (read-only); no argument toggles it',
300
303
  },
301
304
  'plan.on': {
302
- ru: 'Режим плана ВКЛ: доступны только инструменты чтения. Правки и команды запрещены. /plan off — выключить.',
303
- en: 'Plan mode ON: only read tools are available. Edits and commands are disabled. /plan off to disable.',
305
+ ru: 'Режим плана ВКЛ: доступны только инструменты чтения. Правки, команды и MCP-инструменты с мутирующим именем запрещены. /plan off — выключить.',
306
+ en: 'Plan mode ON: only read tools are available. Edits, commands and MCP tools with a mutating name are disabled. /plan off to disable.',
304
307
  },
305
308
  'plan.off': {
306
309
  ru: 'Режим плана ВЫКЛ: агент снова может писать и запускать команды.',
307
310
  en: 'Plan mode OFF: the agent can edit and run commands again.',
308
311
  },
312
+ // BOTH accepted values produce the SAME wire format: JSON Lines, one
313
+ // event per line (there is no single-document mode). `jsonl` is the
314
+ // canonical name, `json` a synonym kept for convenience.
309
315
  'help.opt.output_format': {
310
- ru: 'формат вывода: text|json|jsonl (для скриптов)',
311
- en: 'output format: text|json|jsonl (for scripts)',
316
+ ru: 'поток событий в stdout как JSON Lines — по одному событию на строку (jsonl — каноничное имя, json — его синоним; человеческий текст — в stderr)',
317
+ en: 'event stream on stdout as JSON Lines, one event per line (jsonl is the canonical name, json a synonym; human text goes to stderr)',
312
318
  },
313
319
  'help.opt.plan': {
314
320
  ru: 'стартовать в режиме плана (только чтение)',
315
321
  en: 'start in plan mode (read-only)',
316
322
  },
317
323
  'help.cmd.loop': {
318
- ru: '/loop <интервал> <задача> периодически повторять задачу (напр. 10m)',
319
- en: '/loop <interval> <task> repeat a task periodically (e.g. 10m)',
324
+ ru: '/loop <интервал> <задача> повторять задачу (s/m/h; без единицы — секунды; первый запуск сразу; минимум 15с)',
325
+ en: '/loop <interval> <task> repeat a task (s/m/h; no unit means seconds; the first run is immediate; minimum 15s)',
320
326
  },
321
327
  'help.cmd.cron': {
322
- ru: '/cron <выражение> <задача> запускать по расписанию (5 полей)',
323
- en: '/cron <expr> <task> schedule a task (5-field cron)',
328
+ ru: '/cron "<мин> <час> <день> <мес> <дow>" <задача> запуск по расписанию (5 полей; первый — только после наступления времени)',
329
+ en: '/cron "<min> <hour> <dom> <month> <dow>" <task> schedule a task (5 fields; the first run waits for the schedule)',
324
330
  },
325
331
  'help.cmd.jobs': {
326
- ru: '/jobs [rm <id>|clear] список/удаление запланированных задач',
327
- en: '/jobs [rm <id>|clear] list/remove scheduled tasks',
332
+ ru: '/jobs [rm <id>|clear] список запланированных задач; rm <id> — удалить, clear — снять все',
333
+ en: '/jobs [rm <id>|clear] list scheduled jobs; rm <id> removes one, clear removes all',
328
334
  },
329
335
  'sched.loop_usage': {
330
336
  ru: 'Использование: /loop <интервал> <задача>, например /loop 10m проверь тесты',
@@ -338,9 +344,12 @@ export const helpMessages = {
338
344
  ru: 'Интервал «{v}» не распознан — задача НЕ добавлена. Единицы: s/sec, m/min, h (например, /loop 10m проверь тесты). Без единицы — СЕКУНДЫ (120 = 120с), для минут нужен суффикс m.',
339
345
  en: 'Interval "{v}" was not recognized — NO job was added. Units: s/sec, m/min, h (e.g. /loop 10m run the tests). Without a unit it means SECONDS (120 = 120s); use the m suffix for minutes.',
340
346
  },
347
+ // The floor is zames' OWN (MIN_LOOP_MS), not the provider throttle: that
348
+ // one is 15s on DeepSeek, 4s on Qwen and 0 on GLM, so quoting a single
349
+ // number here was wrong on two of the three backends.
341
350
  'sched.loop_too_short': {
342
- ru: 'Слишком часто: минимум {min} (троттлинг отправок 15с).',
343
- en: 'Too frequent: minimum {min} (the send throttle is 15s).',
351
+ ru: 'Слишком часто: минимальный интервал /loop — {min} (реже — бессмысленно: отправка всё равно ждёт троттлинга провайдера).',
352
+ en: 'Too frequent: the minimum /loop interval is {min} (anything faster is pointless: sending still waits for the provider throttle).',
344
353
  },
345
354
  'sched.added': {
346
355
  ru: '⏰ Задача #{id} добавлена ({when}): {task}',
@@ -453,24 +462,24 @@ export const helpMessages = {
453
462
  en: 'Directory exists: {v}. Check only — the sandbox is fixed at startup, access is NOT granted (relaunch with --dir to work there).',
454
463
  },
455
464
  'help.cmd.config': {
456
- ru: '/config настройки: показать и изменить',
457
- en: '/config settings: view and edit',
465
+ ru: '/config [menu|list|show|ls|get|set|reset|unset|path|paths|lang|language] настройки: меню или подкоманды (пишет в домашний конфиг)',
466
+ en: '/config [menu|list|show|ls|get|set|reset|unset|path|paths|lang|language] settings: menu or subcommands (writes the home config)',
458
467
  },
459
468
  'help.cmd.lang': {
460
469
  ru: '/config lang <ru|en> сменить язык интерфейса и агента',
461
470
  en: '/config lang <ru|en> switch UI and agent language',
462
471
  },
463
472
  'help.cmd.provider': {
464
- ru: '/provider <id> переключить провайдера чата',
465
- en: '/provider <id> switch the chat provider',
473
+ ru: '/provider <id> | status | login — сменить бэкенд (сразу), показать состояние или повторить вход',
474
+ en: '/provider <id> | status | login — switch the backend (live), show the state or re-run the sign-in',
466
475
  },
467
476
  'help.cmd.model': {
468
- ru: '/model [id] показать/выбрать модель провайдера',
469
- en: '/model [id] show/pick the provider model',
477
+ ru: '/model [id] список моделей или выбор по id (Qwen/GLM; в TUI — список выбора)',
478
+ en: '/model [id] list models or pick one by id (Qwen/GLM; the TUI shows a pick list)',
470
479
  },
471
480
  'help.cmd.debug_dom': {
472
- ru: '/debug-dom сохранить HTML страницы (для отладки)',
473
- en: '/debug-dom dump page HTML (debug)',
481
+ ru: '/debug-dom сохранить HTML страницы и найденные селекторы в ~/.zames/logs',
482
+ en: '/debug-dom dump page HTML and matched selectors to ~/.zames/logs',
474
483
  },
475
484
  'help.no_topic': {
476
485
  ru: 'Нет команды по запросу «{v}». Попробуй /help без аргумента.',
@@ -522,20 +531,20 @@ export const helpMessages = {
522
531
  'help.cmd.skill': { ru: 'навык (SKILL.md)', en: 'skill (SKILL.md)' },
523
532
  'help.cmd.custom': { ru: 'пользовательская команда', en: 'custom command' },
524
533
  'help.cmd.skills': {
525
- ru: '/skills список найденных навыков',
526
- en: '/skills list discovered skills',
534
+ ru: '/skills список навыков: имя, источник, описание, путь',
535
+ en: '/skills list skills: name, source, description, path',
527
536
  },
528
537
  'help.cmd.memory': {
529
- ru: '/memory показать MEMORY.md и AGENTS.md',
530
- en: '/memory show MEMORY.md and AGENTS.md',
538
+ ru: '/memory какие AGENTS.md и MEMORY.md реально загружены (пути)',
539
+ en: '/memory which AGENTS.md and MEMORY.md are loaded (paths)',
531
540
  },
532
541
  'help.cmd.remember': {
533
- ru: '/remember <текст> дописать заметку в MEMORY.md',
534
- en: '/remember <text> append a note to MEMORY.md',
542
+ ru: '/remember <текст> дописать заметку в MEMORY.md проекта (создаст файл)',
543
+ en: '/remember <text> append a note to the project MEMORY.md (creates it)',
535
544
  },
536
545
  'help.cmd.init': {
537
- ru: '/init [--force] изучить проект и создать AGENTS.md',
538
- en: '/init [--force] analyze the project and create AGENTS.md',
546
+ ru: '/init [--force] агент изучит проект и напишет AGENTS.md (--force — перезаписать)',
547
+ en: '/init [--force] the agent explores the repo and writes AGENTS.md (--force — overwrite)',
539
548
  },
540
549
  'help.skills': {
541
550
  ru: 'Навыки и свои команды:',
package/dist/i18n/mcp.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // MCP server messages.
2
2
  export const mcpMessages = {
3
3
  'help.cmd.mcp': {
4
- ru: '/mcp показать MCP-серверы и их инструменты',
5
- en: '/mcp show MCP servers and their tools',
4
+ ru: '/mcp MCP-серверы: число инструментов, ошибки и предупреждения',
5
+ en: '/mcp MCP servers: tool count, errors and warnings',
6
6
  },
7
7
  'mcp.loaded': {
8
8
  ru: 'MCP: подключено инструментов {n} ({servers})',
@@ -21,15 +21,21 @@ export const mcpMessages = {
21
21
  en: 'No MCP servers configured.',
22
22
  },
23
23
  'mcp.hint': {
24
- ru: 'Добавь ~/.zames/mcp.json или <project>/.zames/mcp.json.',
25
- en: 'Add ~/.zames/mcp.json or <project>/.zames/mcp.json.',
24
+ ru: 'Добавь ~/.zames/mcp.json, <project>/.zames/mcp.json или <project>/.mcp.json.',
25
+ en: 'Add ~/.zames/mcp.json, <project>/.zames/mcp.json or <project>/.mcp.json.',
26
26
  },
27
27
  'mcp.title': {
28
28
  ru: 'MCP-серверы (инструментов: {n}):',
29
29
  en: 'MCP servers ({n} tools):',
30
30
  },
31
+ 'mcp.floating': {
32
+ ru: 'MCP-сервер «{v}» использует плавающую версию (@latest/@next); закрепите точную версию, чтобы набор инструментов не менялся между запусками.',
33
+ en: 'MCP server "{v}" uses a floating version (@latest/@next); pin an exact version so the tool set does not change between runs.',
34
+ },
31
35
  'mcp.status_error': { ru: '(ошибка: {v})', en: '(error: {v})' },
32
- 'status.mcp': { ru: 'MCP-инструменты: {v}', en: 'MCP tools: {v}' },
36
+ // `{v}` is a COUNT (or 'unknown' when no pool is configured) — not a
37
+ // list of tool names, so the label must not read as one.
38
+ 'status.mcp': { ru: 'MCP-инструментов: {v}', en: 'MCP tools: {v}' },
33
39
  'status.toggles': {
34
40
  ru: 'Размышление: {think} · Поиск: {search}',
35
41
  en: 'Deep thinking: {think} · Search: {search}',
@@ -1,8 +1,11 @@
1
1
  // System-prompt fragments.
2
2
  export const promptMessages = {
3
+ // AGENT-FACING: the model reads this, so neither locale may carry Cyrillic
4
+ // prose (see AGENTS.md "Language policy"). Only the LANGUAGE NAME differs,
5
+ // which is what actually steers the answer language.
3
6
  'prompt.answer_language': {
4
- ru: 'ВАЖНО: отвечай оператору на русском языке. Весь текст в поле message инструмента respond, а также любые пояснения — на русском.',
5
- en: 'IMPORTANT: reply to the operator in English. All text in the respond tool message field, and any explanations, must be in English.',
7
+ ru: 'IMPORTANT: answer the operator in Russian. All text in the message field of the respond tool, and any explanations, must be in Russian.',
8
+ en: 'IMPORTANT: answer the operator in English. All text in the message field of the respond tool, and any explanations, must be in English.',
6
9
  },
7
10
  // The hard "ONLY TOOL CALLS" block. All prose around a tool call is a
8
11
  // protocol violation: the operator never sees it (only tool calls and the
@@ -10,7 +13,10 @@ export const promptMessages = {
10
13
  // stop DeepSeek from generating it INSIDE its chat with code (that is the
11
14
  // model's output); we can only forbid it by prompt and hide it here.
12
15
  'prompt.only_tool_calls': {
13
- ru: '## ТОЛЬКО ВЫЗОВЫ ИНСТРУМЕНТОВ (жёсткое правило)\n\nОбщайся с оператором ТОЛЬКО через вызовы инструментов. Любой обычный текст — объяснения, планы, рассуждения, комментарии, извинения, приветствия, заголовки, списки, markdown, эмодзи — ЗАПРЕЩЁН. Он не читается и считается ошибкой.\n\nТВОЙ ЕДИНСТВЕННЫЙ ВЫВОД — вызов инструмента. В каждом ответе ровно один JSON-объект вызова (или массив независимых вызовов), без единого слова до и после.\n\nНЕЛЬЗЯ писать: «сейчас сделаю», «давай посмотрим», «проверю», планы, объяснения, итоги между шагами.\n\nМОЖНО только вызов инструмента и, в самом конце, когда задача выполнена, respond с итогом.\n\nЕдинственное место, где допускается текст, — поле message внутри respond, и только в самом конце.',
16
+ // AGENT-FACING: the model reads this, so BOTH locales carry the English
17
+ // text (see AGENTS.md "Language policy"): a Russian operator still gets an
18
+ // English protocol block, and the answer LANGUAGE is set separately above.
19
+ ru: '## ONLY TOOL CALLS (hard rule)\n\nTalk to the operator ONLY through tool calls. Any plain text — explanations, plans, reasoning, comments, apologies, greetings, headings, lists, markdown, emoji — is FORBIDDEN. It is not read and counts as an error.\n\nYOUR ONLY OUTPUT is a tool call. Each turn contains exactly one JSON tool-call object (or an array of independent calls), with not a single word before or after.\n\nYou MUST NOT write: "I will now...", "let us look...", "let me check", plans, explanations, progress notes between steps.\n\nALLOWED: only a tool call and, at the very end, when the task is done, respond with the summary.\n\nThe only place where text is allowed is the message field inside respond, and only at the very end.',
14
20
  en: '## ONLY TOOL CALLS (hard rule)\n\nTalk to the operator ONLY through tool calls. Any plain text — explanations, plans, reasoning, comments, apologies, greetings, headings, lists, markdown, emoji — is FORBIDDEN. It is not read and counts as an error.\n\nYOUR ONLY OUTPUT is a tool call. Each turn contains exactly one JSON tool-call object (or an array of independent calls), with not a single word before or after.\n\nYou MUST NOT write: "I will now...", "let us look...", "let me check", plans, explanations, progress notes between steps.\n\nALLOWED: only a tool call and, at the very end, when the task is done, respond with the summary.\n\nThe only place where text is allowed is the message field inside respond, and only at the very end.',
15
21
  },
16
22
  };
package/dist/i18n/qwen.js CHANGED
@@ -3,8 +3,8 @@
3
3
  // so provider-specific wording has one home.
4
4
  export const qwenMessages = {
5
5
  'qwen.guest_mode': {
6
- ru: 'Qwen: вход не выполнен, работаю в гостевом режиме (≈10 сообщений в сутки, без вложений). Войдите через /provider login или запустите с --headed.',
7
- en: 'Qwen: not signed in, running in guest mode (~10 messages/day, no attachments). Log in via /provider login or launch with --headed.',
6
+ ru: 'Qwen: вход не выполнен, работаю в гостевом режиме (суточная квота гостя ограничена, вложения недоступны). Войдите через /provider login (он сам откроет видимое окно) или запустите с --headed.',
7
+ en: 'Qwen: not signed in, running in guest mode (the guest daily quota is limited, attachments are unavailable). Log in via /provider login (it opens a visible window itself) or launch with --headed.',
8
8
  },
9
9
  'qwen.login_email_prompt': {
10
10
  ru: 'Email для входа в Qwen{def}: ',
@@ -177,6 +177,10 @@ export const selfReviewMessages = {
177
177
  ru: 'Сохранённых сессий нет. Они появятся после первой задачи/чата.',
178
178
  en: 'No saved sessions. They appear after the first task/chat.',
179
179
  },
180
+ 'sessions.none_here': {
181
+ ru: 'Для этого каталога сохранённых сессий нет — сначала выполните здесь задачу.',
182
+ en: 'No saved session for this directory — run a task here first.',
183
+ },
180
184
  'sessions.restore_hint': {
181
185
  ru: 'Восстановить: /resume-id <id> (полный id) или выбери сессию в списке /sessions.',
182
186
  en: 'Restore: /resume-id <id> (full id) or pick a session from the /sessions list.',