@ragnoryok1/dsh-client-locale-ru 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js ADDED
@@ -0,0 +1,1222 @@
1
+ window.__ModuleLoader__.load({
2
+ id: "@ragnoryok1/dsh-client-locale-ru",
3
+ factory: (require) => {
4
+ var module = { exports: {} };
5
+ var exports = module.exports;
6
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
+ //#region src/client/dicts.ts
8
+ /**
9
+ * Russian (ru) dictionaries, one entry per locale namespace.
10
+ * Key sets mirror each namespace's zh/en dictionaries at the profiled
11
+ * base commit; any key added upstream later falls back to en at lookup.
12
+ */
13
+ const RU_LABEL = "Русский";
14
+ const RU_DICTS = {
15
+ "common": {
16
+ "ok": "ОК",
17
+ "cancel": "Отмена",
18
+ "close": "Закрыть",
19
+ "copy": "Копировать",
20
+ "copied": "Скопировано",
21
+ "copy.failed": "Не удалось скопировать",
22
+ "copy.value": "Копировать значение",
23
+ "copy.json": "Копировать JSON",
24
+ "copy.path": "Копировать путь",
25
+ "copy.prettyJson": "Копировать красивый JSON",
26
+ "copy.compactJson": "Копировать компактный JSON",
27
+ "copy.optionsHint": "{action}; правый клик — варианты копирования",
28
+ "retry": "Повторить",
29
+ "loading": "Загрузка…",
30
+ "load.failed": "Не удалось загрузить",
31
+ "submit": "Отправить",
32
+ "submitting": "Отправка…",
33
+ "next": "Далее",
34
+ "previous": "Предыдущий",
35
+ "skip": "Пропустить",
36
+ "delete": "Удалить",
37
+ "edit": "Изменить",
38
+ "save": "Сохранить",
39
+ "search": "Поиск",
40
+ "more": "Ещё",
41
+ "collapse": "Свернуть",
42
+ "expand": "Развернуть",
43
+ "back": "Назад",
44
+ "brand.localBuild": "Локальная сборка DSH",
45
+ "unknown": "Неизвестно",
46
+ "none": "Нет",
47
+ "truncated": "Обрезано",
48
+ "json.collapseNode": "Свернуть узел JSON",
49
+ "json.expandNode": "Развернуть узел JSON",
50
+ "json.label": "JSON",
51
+ "markdown.footnotes": "Сноски",
52
+ "markdown.truncatedCharacters": "… обрезано на {total} символах",
53
+ "number.thousand": "{value} тыс.",
54
+ "number.million": "{value} млн"
55
+ },
56
+ "settings.locale": { "language.title": "Язык" },
57
+ "settings.agentPreset": {
58
+ "error": "Не удалось загрузить пресеты агента.",
59
+ "userTrust": "Свой",
60
+ "seatHint": "Пресет агента для сессии, которую вы собираетесь начать",
61
+ "headerHint": "Пресет агента, с которым работает эта сессия; фиксируется при запуске",
62
+ "nav": "Пресеты агента",
63
+ "sectionIntro": "Пресет — это композиция плагинов, с которыми работает агент сессии: его инструменты, промпт и возможности. Скопируйте существующий пресет и настройте под себя или позвольте агенту составить его в режиме Creator.",
64
+ "builtIn": "Встроенные",
65
+ "setDefault": "Сделать пресетом по умолчанию",
66
+ "view": "Просмотр",
67
+ "presetStandardName": "Стандартный режим",
68
+ "presetStandardDescription": "Полноценный агент-программист: редактирование файлов, shell, поиск по файлам и в вебе, навыки, планирование, цели, субагенты и воркфлоу.",
69
+ "presetPtcName": "Режим кода",
70
+ "presetMinimalName": "Минимальный режим",
71
+ "presetMinimalDescription": "Агент-программист из двух инструментов: постоянный bash и str_replace_editor.",
72
+ "presetCordisName": "Режим Creator",
73
+ "presetCordisDescription": "Создан для разработки собственных пресетов: все возможности стандартного режима плюс инспекция на лету, эксперименты с плагинами и подсказки по созданию пресетов.",
74
+ "duplicate": "Дублировать",
75
+ "duplicateUnavailable": "В этой сборке нет каталога пресетов для записи",
76
+ "delete": "Удалить",
77
+ "presetId": "Идентификатор",
78
+ "presetIdPlaceholder": "my-agent",
79
+ "displayName": "Название",
80
+ "displayNamePlaceholder": "Показывается в выборе; по умолчанию — идентификатор",
81
+ "inUse": "Используется",
82
+ "builtInGroup": "Встроенные",
83
+ "customGroup": "Свои",
84
+ "noDescription": "Нет описания.",
85
+ "brokenBadge": "Не удалось загрузить",
86
+ "brokenNoCopy": "Пресет, который не удалось загрузить, нельзя дублировать",
87
+ "copyOf": "Копия из",
88
+ "composition": "Композиция (agent.cordis.yml)",
89
+ "cancel": "Отмена",
90
+ "close": "Закрыть",
91
+ "retry": "Повторить",
92
+ "copyTitle": "Дублировать пресет",
93
+ "copyIntro": "Пресет целиком копируется на этом компьютере. Идентификатор становится именем каталога и не меняется впоследствии; всё остальное редактируется в файлах самого пресета.",
94
+ "create": "Создать",
95
+ "creating": "Создание…",
96
+ "creatorDraft": "Составить свой пресет в режиме Creator",
97
+ "openLocation": "Открыть папку",
98
+ "showLocation": "Показать путь",
99
+ "revealedPathLabel": "Файлы пресета:",
100
+ "idRequired": "Укажите идентификатор пресета.",
101
+ "idInvalid": "Используйте строчные буквы, цифры и дефисы, начиная с буквы или цифры.",
102
+ "idTaken": "Пресет с таким идентификатором уже существует.",
103
+ "deleteTitle": "Удалить этот пресет?",
104
+ "deleteDescription": "Каталог пресета будет удалён. Сессии, которые уже работают на нём, продолжат работу; новые сессии не смогут его выбрать.",
105
+ "deleteConfirm": "Удалить",
106
+ "deleting": "Удаление…",
107
+ "presetPtcDescription": "Полноценный агент-программист без инструмента workflow; остальные инструменты доступны через SDK режима PTC, поэтому модель может объединять многошаговые операции в одну программу на TypeScript.",
108
+ "switchRefused": "Не удалось переключить на «{name}»: {reason}"
109
+ },
110
+ "approval": {
111
+ "detail.aria": "Детали запроса",
112
+ "waiting": "Ожидает одобрения",
113
+ "escalation": "Инструмент {toolName} запрашивает привилегированное выполнение",
114
+ "reject": "Отклонить",
115
+ "allowOnce": "Разрешить один раз"
116
+ },
117
+ "command": {
118
+ "search.placeholder": "Поиск…",
119
+ "search.aria": "Фильтр вариантов",
120
+ "status.loading": "Загрузка вариантов…",
121
+ "status.applying": "Применение…",
122
+ "status.empty": "Нет вариантов",
123
+ "overlay.aria": "Варианты /{command}",
124
+ "listbox.aria": "Совпадения /{command}",
125
+ "notice.imagesUnsupported": "/{command} не принимает изображения; сначала удалите их"
126
+ },
127
+ "conversation": {
128
+ "hint.plan": "опишите вашу задачу, чтобы составить план",
129
+ "hint.goal": "опишите цель для длительной задачи",
130
+ "hint.goal.active": "цель активна — edit / pause / resume / clear",
131
+ "placeholder.plan": "опишите вашу задачу, чтобы составить план",
132
+ "placeholder.default": "Напишите агенту",
133
+ "placeholder.unavailable": "Сессия недоступна",
134
+ "placeholder.parentOffline": "Родительская сессия офлайн: отправка недоступна, но вы можете остановить выполнение",
135
+ "placeholder.hero": "Опишите, что вы хотите создать",
136
+ "placeholder.workspace": "Выберите рабочее пространство, чтобы начать",
137
+ "placeholder.steerQueue": "Cmd/Ctrl+Enter — отправить все сообщения из очереди",
138
+ "input.commands": "Команды",
139
+ "input.stop": "Остановить генерацию",
140
+ "input.send": "Отправить сообщение",
141
+ "input.accessMode": "Режим доступа, текущий: {name}",
142
+ "image.dropTitle": "Перетащите изображения сюда, чтобы добавить их",
143
+ "image.dropDesc": "До {count} изображений, по {size} каждое",
144
+ "image.dropBlocked": "Сейчас нельзя добавить изображения",
145
+ "image.pending": "Изображения ожидают отправки",
146
+ "image.openOriginal": "Открыть оригинал",
147
+ "image.openOriginalLabel": "{label}, нажмите, чтобы открыть оригинал",
148
+ "image.remove": "Удалить изображение {name}",
149
+ "image.scrollLeft": "Прокрутить изображения влево",
150
+ "image.scrollRight": "Прокрутить изображения вправо",
151
+ "image.original": "Оригинал",
152
+ "image.label": "Изображение",
153
+ "image.loadFailed": "Не удалось загрузить изображение; нажмите, чтобы повторить",
154
+ "image.loading": "Загрузка изображения…",
155
+ "image.preview": "Просмотр оригинала",
156
+ "image.closePreview": "Закрыть просмотр оригинала",
157
+ "image.unsupportedType": "Поддерживаются только изображения PNG, JPG, WebP и GIF",
158
+ "image.tooMany": "Сообщение может содержать до {count} изображений",
159
+ "image.fileTooLarge": "Каждое изображение должно быть меньше {size}",
160
+ "image.totalTooLarge": "Суммарный размер изображений превышает {size}; удалите часть и повторите",
161
+ "image.tooManyPixels": "Разрешение изображения слишком высокое; сожмите его и повторите",
162
+ "image.dimensionTooLarge": "Стороны изображения не должны превышать {size}px; уменьшите его и повторите",
163
+ "image.modelUnsupported": "Текущая модель не поддерживает изображения; переключитесь на модель с их поддержкой",
164
+ "image.sendFailed": "Не удалось отправить изображения ({reason}); добавьте их заново и повторите",
165
+ "context.aria": "Использовано {percent} контекста",
166
+ "context.used": "контекста использовано",
167
+ "context.system": "Системный промпт",
168
+ "context.tools": "Инструменты",
169
+ "context.messages": "Сообщения",
170
+ "settings.enter.title": "Поведение Enter при занятости",
171
+ "settings.enter.description": "Только при занятости; Cmd/Ctrl+Enter использует другое поведение",
172
+ "settings.enter.queue": "В очередь",
173
+ "settings.enter.steer": "Отправить сразу",
174
+ "access.preset.readOnly": "Только чтение",
175
+ "access.preset.workspaceWrite": "Запись в рабочую папку",
176
+ "access.preset.fullAccess": "Полный доступ",
177
+ "access.confirm.title": "Включить «Полный доступ»?",
178
+ "access.confirm.description": "«Полный доступ» уменьшает число этапов подтверждения и позволяет агенту напрямую выполнять больше действий, включая чувствительные операции, изменение файлов или внешние команды. Используйте его, только если доверяете текущей задаче.",
179
+ "access.confirm.acknowledge": "Я понимаю риски и хочу продолжить",
180
+ "access.confirm.cancel": "Отмена",
181
+ "access.confirm.enable": "Включить «Полный доступ»",
182
+ "hero.headline": "К неизведанному",
183
+ "hero.preview": "Предпросмотр",
184
+ "hero.chooseWorkspace": "Выбрать рабочее пространство",
185
+ "session.hierarchy": "Иерархия сессий",
186
+ "todo.title": "Задачи",
187
+ "todo.progress.done": "{done} выполнено",
188
+ "todo.progress.active": "{active} в процессе",
189
+ "todo.progress.pending": "{pending} ожидает",
190
+ "todo.rowTitle": "Обновить список задач",
191
+ "todo.completed": "{done}/{total} выполнено",
192
+ "command.imagesUnsupported": "/{command} не принимает изображения; сначала удалите их",
193
+ "ask.rowTitle": "Задать вопрос",
194
+ "ask.waiting": "ожидание",
195
+ "ask.cancelled": "отменено",
196
+ "ask.cancelledDetail": "Этот набор вопросов был отменён до отправки ответов.",
197
+ "ask.interrupted": "прервано",
198
+ "ask.interruptedDetail": "Этот набор вопросов был прерван до отправки ответов.",
199
+ "ask.answered": "{answered}/{total} отвечено",
200
+ "ask.skipped": "Не отвечено",
201
+ "bash.running": "Выполняется",
202
+ "bash.failed": "Ошибка",
203
+ "bash.stopped": "Остановлено",
204
+ "row.running": "Выполняется",
205
+ "row.failed": "Ошибка",
206
+ "row.stopped": "Остановлено",
207
+ "row.input": "ВВОД",
208
+ "row.output": "ВЫВОД",
209
+ "row.inspect": "Просмотр",
210
+ "tool.title.search": "Поиск",
211
+ "tool.title.read": "Чтение",
212
+ "tool.title.bash": "Bash",
213
+ "tool.title.write": "Запись",
214
+ "tool.title.edit": "Правка",
215
+ "tool.title.code": "Код",
216
+ "tool.title.generic": "Вызов инструмента",
217
+ "tool.title.inspect": "Просмотр",
218
+ "tool.title.runCordis": "Запустить плагин Cordis",
219
+ "tool.title.stopCordis": "Остановить плагин Cordis",
220
+ "tool.title.removeCordis": "Удалить плагин Cordis",
221
+ "tool.title.pwsh": "Pwsh",
222
+ "tool.title.grep": "Grep",
223
+ "tool.title.glob": "Glob",
224
+ "tool.title.webSearch": "Поиск",
225
+ "tool.title.webFetch": "Запрос",
226
+ "diff.files.one": "{count} файл",
227
+ "diff.files.other": "{count} файлов",
228
+ "diff.collapseAria": "Свернуть изменения",
229
+ "diff.expandAria": "Показать ещё {count} строк изменений",
230
+ "diff.expandRest": "… ещё {count} строк",
231
+ "read.window": "Показано {shown} из {total} строк",
232
+ "read.collapseAria": "Свернуть содержимое",
233
+ "read.expandAria": "Показать ещё {count} строк",
234
+ "read.expandRest": "… ещё {count} строк",
235
+ "search.paths": "{shown} путей",
236
+ "search.paths.truncated": "Показано {shown} из {total} путей",
237
+ "search.matches": "{shown} совпадений · {files} файлов",
238
+ "search.matches.truncated": "Показано {shown} из {total} совпадений · {files} файлов",
239
+ "search.noResults": "Ничего не найдено",
240
+ "search.collapseAria": "Свернуть результаты",
241
+ "search.expandAria": "Показать ещё {count} строк результатов",
242
+ "search.expandRest": "… ещё {count} строк",
243
+ "web.noResults": "Ничего не найдено",
244
+ "web.sourcesTruncated": "Список источников обрезан",
245
+ "web.http": "HTTP",
246
+ "web.contentTruncated": "Содержимое обрезано",
247
+ "details.running": "Выполняется…",
248
+ "queue.count": "В очереди: {n}",
249
+ "queue.image": "Изображение в очереди сообщения",
250
+ "queue.edit": "Изменить сообщение из очереди",
251
+ "queue.edit.unsupported": "Содержит нетекстовый контент; редактирование пока не поддерживается",
252
+ "queue.save": "Сохранить сообщение из очереди",
253
+ "queue.cancelEdit": "Отменить редактирование",
254
+ "queue.remove": "Удалить сообщение из очереди",
255
+ "queue.steer": "Отправить сразу",
256
+ "queue.steer.unavailable": "Отправка сразу доступна только пока агент работает",
257
+ "queue.editFailed": "Не удалось изменить: сообщение могло уже начать отправляться.",
258
+ "queue.removeFailed": "Не удалось удалить: сообщение могло уже начать отправляться.",
259
+ "queue.steerFailed": "Не удалось отправить сразу. Повторите попытку.",
260
+ "terminal.signal": "сигнал {signal}",
261
+ "terminal.exitCode": "код выхода {code}",
262
+ "terminal.running": "Выполняется",
263
+ "terminal.failed": "Ошибка",
264
+ "terminal.done": "Готово",
265
+ "terminal.noOutput": "Нет вывода",
266
+ "terminal.collapseAria": "Свернуть вывод",
267
+ "terminal.expandAria": "Развернуть оставшиеся строки вывода ({n})",
268
+ "terminal.expandRest": "… ещё строк: {n}",
269
+ "terminal.sendInput": "(отправить ввод)",
270
+ "terminal.session": "Терминал {sessionId}"
271
+ },
272
+ "deliverables": {
273
+ "produced.label": "Создано",
274
+ "produced.moreOne": "+ 1 файл",
275
+ "produced.more": "+ {count} файлов",
276
+ "produced.open": "Открыть {name}",
277
+ "produced.showInFolder": "Показать в папке"
278
+ },
279
+ "goal": {
280
+ "phase.active": "Активная цель",
281
+ "phase.paused": "Приостановленная цель",
282
+ "phase.blocked": "Заблокированная цель",
283
+ "objective.aria": "Содержимое цели",
284
+ "commandInput.aria": "Ввод команды",
285
+ "action.save": "Сохранить цель",
286
+ "action.cancel": "Отменить правку",
287
+ "action.pause": "Приостановить цель",
288
+ "action.resume": "Возобновить цель",
289
+ "action.edit": "Изменить цель",
290
+ "action.clear": "Удалить цель"
291
+ },
292
+ "slash.menu": {
293
+ "command": "Команды",
294
+ "skill": "Навыки",
295
+ "subagent": "Субагенты",
296
+ "loading": "Загрузка…",
297
+ "drill.aria": "Обзор папки",
298
+ "drill.hint": "Обзор папки",
299
+ "drill.key": "Tab",
300
+ "crumbs.aria": "Навигация по папкам",
301
+ "suggestions.aria": "Возможные варианты по триггеру"
302
+ },
303
+ "job": {
304
+ "count.live.one": "{count} фоновая задача выполняется",
305
+ "count.live.other": "{count} фоновых задач выполняется",
306
+ "count.idle.one": "{count} фоновая задача",
307
+ "count.idle.other": "{count} фоновых задач",
308
+ "list.aria": "Фоновые задачи",
309
+ "status.running": "выполняется",
310
+ "status.stopping": "останавливается",
311
+ "status.completed": "завершена",
312
+ "status.killed": "отменена",
313
+ "status.failed": "ошибка",
314
+ "duration.seconds": "{seconds} с",
315
+ "duration.minutes": "{minutes} мин {seconds} с",
316
+ "duration.hours": "{hours} ч {minutes} мин",
317
+ "duration.title.live": "Выполняется {duration}",
318
+ "duration.title.done": "Заняло {duration}"
319
+ },
320
+ "feedback": {
321
+ "action.like": "Хороший ответ",
322
+ "action.likeActive": "Снять оценку",
323
+ "action.dislike": "Плохой ответ",
324
+ "action.dislikeActive": "Снять оценку",
325
+ "note.open": "Добавить заметку",
326
+ "note.dialog": "Отзыв",
327
+ "note.placeholder": "Что было хорошо, а что не так? (необязательно)",
328
+ "note.save": "Сохранить",
329
+ "note.cancel": "Отмена",
330
+ "note.aria": "Заметка об отзыве",
331
+ "error.conflict": "Этот отзыв изменён в другом месте; показано актуальное состояние",
332
+ "error.load": "Не удалось загрузить отзыв",
333
+ "error.generic": "Не удалось сохранить отзыв"
334
+ },
335
+ "model": {
336
+ "command.description": "Выбор модели для этого диалога",
337
+ "option.loadError": "Не удалось загрузить каталог: {message}",
338
+ "trigger.fallback": "Выбрать модель",
339
+ "trigger.loading": "Загрузка моделей…",
340
+ "trigger.selectAria": "Выбрать модель",
341
+ "trigger.aria": "Выбрать модель, сейчас {model}",
342
+ "trigger.ariaEffort": "Выбрать модель, сейчас {model}, уровень рассуждения {effort}",
343
+ "menu.aria": "Модель и уровень рассуждения",
344
+ "menu.model": "Модель",
345
+ "menu.effort": "Уровень рассуждения",
346
+ "effort.providerDefault": "По умолчанию",
347
+ "status.loading": "Обновление списка моделей…",
348
+ "error.action": "Не удалось выполнить операцию с моделью: {message}",
349
+ "action.reload": "Перезагрузить",
350
+ "warning.groupLoad": "Не удалось загрузить {name}: {message}",
351
+ "empty.models": "Нет доступных моделей.",
352
+ "blocked.composer": "Эта модель недоступна — выберите другую, чтобы продолжить",
353
+ "empty.efforts": "У этой модели нет уровней рассуждения."
354
+ },
355
+ "settings.permission": {
356
+ "title": "Права доступа",
357
+ "description": "Выберите режим прав по умолчанию для новых сессий",
358
+ "loading": "Загрузка",
359
+ "unavailable": "Недоступно",
360
+ "preset.readOnly": "Только чтение",
361
+ "preset.workspaceWrite": "Запись в рабочую папку",
362
+ "preset.fullAccess": "Полный доступ",
363
+ "confirm.title": "Включить «Полный доступ»?",
364
+ "confirm.description": "«Полный доступ» позволяет новым сессиям пропускать шаги подтверждения и выполнять больше действий напрямую, включая чувствительные операции, изменение файлов или внешние команды. Используйте его, только если доверяете последующим задачам.",
365
+ "confirm.acknowledge": "Я понимаю риски и хочу продолжить",
366
+ "confirm.cancel": "Отмена",
367
+ "confirm.enable": "Включить «Полный доступ»"
368
+ },
369
+ "permission.access": {
370
+ "preset.readOnly": "Только чтение",
371
+ "preset.workspaceWrite": "Запись в рабочую папку",
372
+ "preset.fullAccess": "Полный доступ",
373
+ "confirm.title": "Включить «Полный доступ»?",
374
+ "confirm.description": "«Полный доступ» уменьшает число этапов подтверждения и позволяет агенту напрямую выполнять больше действий, включая чувствительные операции, изменение файлов или внешние команды. Используйте его, только если доверяете текущей задаче.",
375
+ "confirm.acknowledge": "Я понимаю риски и хочу продолжить",
376
+ "confirm.cancel": "Отмена",
377
+ "confirm.enable": "Включить «Полный доступ»"
378
+ },
379
+ "plan": {
380
+ "chip.label": "План",
381
+ "chip.on.aria": "Режим планирования включён, нажмите, чтобы выключить",
382
+ "chip.on.title": "Режим планирования включён — нажмите, чтобы выключить (/plan off)",
383
+ "chip.off.aria": "Режим планирования выключен, нажмите, чтобы включить",
384
+ "chip.off.title": "Режим планирования выключен — нажмите, чтобы включить (/plan)",
385
+ "chip.exitFailed": "Не удалось выйти из режима планирования"
386
+ },
387
+ "reference": {
388
+ "section.files": "Файлы и папки",
389
+ "section.sessions": "Сессии",
390
+ "candidate.noCwd": "(нет рабочей папки)",
391
+ "crumb.root": "Рабочая папка",
392
+ "time.now": "сейчас",
393
+ "time.minutes": "{n} мин",
394
+ "time.hours": "{n} ч",
395
+ "time.days": "{n} д",
396
+ "time.months": "{n} мес",
397
+ "time.years": "{n} г"
398
+ },
399
+ "schedule.catalog": {
400
+ "trigger.one": "{count} напоминание",
401
+ "trigger.other": "{count} напоминаний",
402
+ "list.aria": "Активные напоминания",
403
+ "status.scheduled": "Запланировано",
404
+ "status.overdue": "Просрочено",
405
+ "frequency.once": "Однократно",
406
+ "frequency.every": "Каждые {value} {unit}",
407
+ "unit.day.one": "день",
408
+ "unit.day.other": "дней",
409
+ "unit.hour.one": "час",
410
+ "unit.hour.other": "часов",
411
+ "unit.minute.one": "минута",
412
+ "unit.minute.other": "минут",
413
+ "unit.second.one": "секунда",
414
+ "unit.second.other": "секунд",
415
+ "relative.now": "Срок наступил",
416
+ "relative.future": "через {value} {unit}",
417
+ "relative.overdue": "Просрочено на {value} {unit}"
418
+ },
419
+ "settings": {
420
+ "trigger": "Настройки",
421
+ "title": "Настройки",
422
+ "close": "Закрыть",
423
+ "openDocument": "Открыть файл конфигурации",
424
+ "openDocument.error": "Не удалось открыть файл конфигурации",
425
+ "general.nav": "Основные",
426
+ "connection.error": "Отключено",
427
+ "connection.retry": "Подключиться сейчас",
428
+ "connection.connecting": "Подключение",
429
+ "connection.connected": "Подключено",
430
+ "connection.reconnect": "Отключено, подключиться сейчас",
431
+ "connection.restart": "Подключение, перезапустить сейчас"
432
+ },
433
+ "settings.models": {
434
+ "nav": "Модели",
435
+ "title": "Модели",
436
+ "intro": "Введите API-ключи, чтобы использовать модели указанных провайдеров.",
437
+ "edit": "Изменить",
438
+ "editProvider": "Изменить {provider}",
439
+ "remove": "Удалить",
440
+ "removeProvider": "Удалить {provider}",
441
+ "deleteTitle": "Удалить {provider}?",
442
+ "deleteDescription": "Удаление {provider} уберёт его конфигурацию. Используемые им учётные данные управляются отдельно и будут сохранены.",
443
+ "deleteDescriptionWithCredential": "Удаление {provider} уберёт его конфигурацию и сохранённый API-ключ.",
444
+ "deleteConfirm": "Удалить {provider}",
445
+ "deleting": "Удаление {provider}…",
446
+ "add": "Добавить провайдера",
447
+ "provider": "Провайдер",
448
+ "close": "Закрыть",
449
+ "cancel": "Отмена",
450
+ "apply": "Применить",
451
+ "applying": "Применение…",
452
+ "savedProvider": "Сохранено: {provider}.",
453
+ "credentialConfigured": "API-ключ настроен",
454
+ "credentialMissing": "API-ключ отсутствует",
455
+ "readOnly": "Документ настроек в этой сборке доступен только для чтения.",
456
+ "loadFailed": "Не удалось загрузить каталог провайдеров",
457
+ "conflict": "Пока эта карточка была открыта, настройки изменились в другом месте. Закройте её и откройте заново, чтобы редактировать актуальные значения.",
458
+ "retry": "Повторить",
459
+ "keyInput": "API-ключ",
460
+ "keyPlaceholder": "Введите API-ключ",
461
+ "keyPlaceholderNative": "Введите API-ключ или оставьте поле пустым, чтобы использовать аутентификацию из окружения",
462
+ "keyStored": "Настроен — введите новое значение, чтобы заменить",
463
+ "keyEnvLocked": "Предоставлен окружением запуска (только для чтения)",
464
+ "customized": "Изменённые настройки",
465
+ "baseUrl": "Базовый URL",
466
+ "baseUrlDefault": "По умолчанию у провайдера",
467
+ "models": "Модели",
468
+ "modelsInherited": "Используются настройки адаптера по умолчанию",
469
+ "modelsCustomized": "Изменённый каталог моделей",
470
+ "resetModels": "Восстановить значения по умолчанию",
471
+ "model": "Модель",
472
+ "modelId": "ID модели",
473
+ "modelName": "Отображаемое имя",
474
+ "modelNamePlaceholder": "Если пусто — используется ID модели",
475
+ "contextWindow": "Контекстное окно",
476
+ "contextWindowPlaceholder": "Используется значение по умолчанию провайдера",
477
+ "maxTokens": "Максимум выходных токенов",
478
+ "maxTokensPlaceholder": "Используется значение по умолчанию провайдера",
479
+ "modelAdvanced": "Возможности",
480
+ "addModel": "Добавить модель",
481
+ "removeModel": "Удалить модель",
482
+ "modelsEmpty": "В селекторе не будет показано ни одной модели. ID вне списка можно отправлять напрямую.",
483
+ "keyBlank": "Введите API-ключ или оставьте поле пустым, чтобы сохранить имеющийся.",
484
+ "keyBlankNew": "Введите API-ключ или оставьте поле пустым, если провайдер использует другой способ аутентификации.",
485
+ "keyIllegalCharacters": "Формат этого API-ключа недействителен. Проверьте его.",
486
+ "modelIdRequired": "ID модели обязателен.",
487
+ "modelIdDuplicate": "ID модели должен быть уникальным.",
488
+ "modelNameInvalid": "Отображаемое имя не может быть пустым.",
489
+ "modelContextInvalid": "Контекстное окно должно быть положительным числом, например 131072, 256K или 1M.",
490
+ "modelMaxTokensInvalid": "Максимум выходных токенов должен быть положительным числом, например 8192, 64K или 1M.",
491
+ "advancedHint": "Остальные поля находятся в settings.yaml; редактируйте соответствующий раздел напрямую.",
492
+ "modelCapacityInvalid": "Возможность должна быть числом, при желании с суффиксом K или M.",
493
+ "modelDuplicate": "Каждый ID модели может встречаться только один раз.",
494
+ "modelContextWindow": "Контекстное окно",
495
+ "modelMaxTokens": "Максимум выходных токенов",
496
+ "fetchModels": "Получить доступные модели",
497
+ "fetching": "Запрос к провайдеру…",
498
+ "fetchNeedsBaseUrl": "Сначала введите базовый URL, затем получайте модели.",
499
+ "fetchEmpty": "Провайдер не указал модели. Добавьте их вручную.",
500
+ "fetchTitle": "Выберите модели для добавления",
501
+ "fetchDescription": "Это модели, доступные у провайдера. Выберите те, что нужно добавить.",
502
+ "fetchSelectAll": "Выбрать все",
503
+ "fetchDeselectAll": "Снять выбор",
504
+ "fetchAdopt": "Добавить выбранные",
505
+ "customAdd": "Добавить своего провайдера",
506
+ "customTitle": "Свой провайдер",
507
+ "customTag": "Свой",
508
+ "customRoute": "ID провайдера",
509
+ "customRouteHint": "Идентификатор в нижнем регистре, начинающийся с буквы; уникально именует провайдера в запросах и как имя учётных данных.",
510
+ "customRouteInvalid": "Начинайте с буквы в нижнем регистре; далее — буквы в нижнем регистре, цифры и дефисы.",
511
+ "customRouteTaken": "Этот ID уже использует другой провайдер.",
512
+ "customDisplayName": "Отображаемое имя",
513
+ "customApi": "Протокол API",
514
+ "customApiUnset": "Не выбран",
515
+ "customNeedsBaseUrl": "Своему провайдеру нужен базовый URL.",
516
+ "customNeedsModels": "Своему провайдеру нужна хотя бы одна модель.",
517
+ "create": "Создать провайдера",
518
+ "creating": "Создание…",
519
+ "welcomeTitle": "Уведомление о внутреннем тестировании",
520
+ "welcomeBody": "DeepSeek Harness 0.1 находится в стадии тестирования среди разработчиков Harness. Многие области ещё требуют доработки, и мы будем рады отзывам от сообщества разработчиков. Основные плагины и базовые API DeepSeek Harness будут активно развиваться в ближайшие месяцы.\n\nМы рассчитываем вместе с разработчиками по всему миру исследовать пределы возможностей интеллекта, опираясь на открытую, свободно используемую и компонуемую инфраструктуру. Приглашаем разработчиков Harness присоединиться к экосистеме плагинов DSH.",
521
+ "welcomeContinue": "Продолжить",
522
+ "welcomeError": "Не удалось сохранить подтверждение. Попробуйте ещё раз.",
523
+ "onboardingTitle": "Добавьте API-ключ, чтобы начать",
524
+ "onboardingDescription": "Настройте официального провайдера DeepSeek, чтобы начать работу.",
525
+ "onboardingLater": "Настроить позже",
526
+ "onboardingSave": "Сохранить и продолжить",
527
+ "onboardingSaving": "Сохранение…",
528
+ "keyRequired": "Введите API-ключ, чтобы продолжить.",
529
+ "fetchSearch": "Поиск моделей",
530
+ "fetchNoMatches": "Нет подходящих моделей.",
531
+ "customBaseUrlPlaceholder": "https://gateway.example/v1",
532
+ "settingsPathUnresolvable": "не удалось разрешить путь настроек"
533
+ },
534
+ "settings.pluginInventory": {
535
+ "tab": "Список плагинов",
536
+ "loading": "Чтение плагинов…",
537
+ "error": "Плагины временно недоступны.",
538
+ "retry": "Повторить",
539
+ "search": "Поиск плагинов",
540
+ "empty": "Нет доступных плагинов.",
541
+ "emptySearch": "Нет подходящих плагинов.",
542
+ "enabledTag": "Включён",
543
+ "disabledTag": "Отключён",
544
+ "configuration": "Конфигурация",
545
+ "unobserved": "Не подключён",
546
+ "pending": "Ожидание зависимостей",
547
+ "loadingPhase": "Загрузка",
548
+ "active": "Подключён",
549
+ "failed": "Ошибка подключения",
550
+ "unloading": "Отключение",
551
+ "presetTitle": "Плагины сессии",
552
+ "presetSubtitle": "Собираются для каждой сессии пресетами агента",
553
+ "countUnit": "плагины",
554
+ "switcherLabel": "Выберите пресет агента для просмотра",
555
+ "presetOptionDefault": "{name} (по умолчанию)",
556
+ "presetOptionBroken": "{name} (не удалось загрузить)",
557
+ "globalTitle": "Глобальные плагины",
558
+ "globalSubtitle": "Общие для системы и всех сессий",
559
+ "presetProvidedDetail": "Глобально отключён; пресеты агента включают его на уровне сессии",
560
+ "enabledIn": "Включён в",
561
+ "viewInPreset": "Открыть в группе пресета",
562
+ "matchesInOtherPresets": "Ещё совпадений в других пресетах: {count} ",
563
+ "failedCountLabel": "ошибок",
564
+ "conditionalTag": "Условно",
565
+ "presetEnabledTag": "Включён через пресеты",
566
+ "failedTag": "Сбой",
567
+ "moduleLabel": "Модуль",
568
+ "fromPreset": "Из",
569
+ "condition": "Отключается, когда",
570
+ "runtime": "Состояние"
571
+ },
572
+ "settings.plugins": {
573
+ "nav": "Плагины",
574
+ "title": "Плагины",
575
+ "intro": "Настройка и просмотр плагинов, установленных в этой сборке.",
576
+ "tabs": "Виды плагинов",
577
+ "configurableTab": "Конфигурация плагинов",
578
+ "empty": "Эта сборка не открывает настроек плагинов.",
579
+ "overridden": "Переопределено",
580
+ "reset": "Сбросить к значению по умолчанию",
581
+ "readOnly": "В этой сборке настройки хранятся только для чтения.",
582
+ "expand": "Показать настройки",
583
+ "collapse": "Скрыть настройки",
584
+ "save": "Сохранить",
585
+ "saving": "Сохранение…",
586
+ "discard": "Отменить изменения",
587
+ "unsaved": "Не сохранено",
588
+ "saveFailed": "Сборка не приняла эти значения; они оставлены для исправления.",
589
+ "invalidNumber": "Введите число или оставьте поле пустым, чтобы использовать значение по умолчанию.",
590
+ "bashTitle": "Терминал",
591
+ "bashDescription": "Ограничения для каждой команды, которую выполняет агент.",
592
+ "bashTimeoutMs": "Тайм-аут команды (мс)",
593
+ "bashTimeoutMsHint": "Сколько может выполняться одна команда, прежде чем будет завершена.",
594
+ "bashMaxOutputBytes": "Лимит вывода на поток (байт)",
595
+ "bashMaxOutputBytesHint": "Вывод сверх лимита сохраняется во временный файл, а не теряется.",
596
+ "agentLoopTitle": "Цикл агента",
597
+ "agentLoopDescription": "Как агент распределяет вызовы инструментов.",
598
+ "agentLoopMaxParallel": "Параллельные вызовы инструментов",
599
+ "agentLoopMaxParallelHint": "Верхний предел параллельных вызовов в пределах одного шага.",
600
+ "webSearchTitle": "Веб-поиск",
601
+ "webSearchDescription": "Поисковый провайдер DeepSeek.",
602
+ "webSearchApiKey": "API-ключ",
603
+ "webSearchApiKeyHint": "Хранится вне файла настроек. Оставьте пустым, чтобы сохранить текущий ключ.",
604
+ "webSearchApiKeySet": "Ключ настроен.",
605
+ "webSearchApiKeyUnset": "Ключ не настроен; поиск недоступен, пока он не будет добавлен.",
606
+ "webSearchBaseUrl": "Эндпоинт",
607
+ "webSearchBaseUrlHint": "Оставьте пустым, чтобы использовать адрес провайдера по умолчанию.",
608
+ "webSearchMaxUses": "Максимум поисков за запрос",
609
+ "webSearchMaxUsesHint": "Сколько раз один запрос может искать, прежде чем должен дать ответ.",
610
+ "subagentModelSelectionTitle": "Субагенты",
611
+ "subagentModelSelectionDescription": "Укажите, какие модели агенты могут выбирать для субагентов.",
612
+ "subagentModelSelectionToggle": "Разрешить агентам выбирать модели для субагентов",
613
+ "subagentModelSelectionChoose": "При включении агенты могут выбирать провайдера, модель и уровень рассуждения для каждого субагента из авторизованных моделей ниже. Применяется только к новым сессиям.",
614
+ "subagentModelSelectionAllowed": "Модели, доступные агентам для выбора",
615
+ "subagentModelSelectionLoading": "Загрузка моделей…",
616
+ "subagentModelSelectionLoadFailed": "Не удалось загрузить модели.",
617
+ "subagentModelSelectionRetry": "Повторить",
618
+ "subagentModelSelectionPartial": "Некоторые провайдеры моделей не загрузились; сохранённые выборки по-прежнему можно удалить.",
619
+ "subagentModelSelectionUnavailable": "Сейчас недоступно",
620
+ "subagentModelSelectionUnavailableGroup": "Сохранено, но сейчас недоступно",
621
+ "subagentModelSelectionEmpty": "Ни один провайдер моделей сейчас не предлагает моделей.",
622
+ "subagentModelSelectionRequired": "Перед сохранением выберите хотя бы одну модель.",
623
+ "subagentModelSelectionConflict": "Настройки изменены в другом месте. Отмените черновик и повторите.",
624
+ "subagentModelSelectionOff": "Субагенты используют настроенные значения по умолчанию или наследуют модель родительского агента. Сохранённые выборки моделей остаются."
625
+ },
626
+ "sidebar": {
627
+ "session.new": "Новая сессия",
628
+ "session.new.label": "Новая сессия",
629
+ "toggle.open": "Открыть боковую панель",
630
+ "toggle.collapse": "Свернуть боковую панель"
631
+ },
632
+ "skill": {
633
+ "row.title": "Навык",
634
+ "row.running": "Загрузка навыка",
635
+ "row.failed": "Не удалось загрузить навык",
636
+ "row.stopped": "Загрузка навыка прервана",
637
+ "row.instructions": "Инструкции",
638
+ "row.inspect": "Просмотр",
639
+ "menu.userOnly": "только пользователь"
640
+ },
641
+ "subagent": {
642
+ "diagnostic.corrupt": "повреждённая запись сессии",
643
+ "diagnostic.unsupported": "неподдерживаемая версия записи субагента",
644
+ "diagnostic.unavailable": "запись сессии временно недоступна",
645
+ "duration.seconds": "{seconds} с",
646
+ "duration.minutes": "{minutes} мин {seconds} с",
647
+ "duration.hours": "{hours} ч {minutes} мин {seconds} с",
648
+ "duration.days": "{days} д",
649
+ "duration.daysHours": "{days} д {hours} ч",
650
+ "duration.months": "~{months} мес",
651
+ "duration.monthsDays": "~{months} мес {days} д",
652
+ "duration.years": "~{years} г",
653
+ "duration.yearsMonths": "~{years} г {months} мес",
654
+ "duration.exactDays": "{days} д {hours} ч {minutes} мин {seconds} с",
655
+ "duration.exactTitle": "Общее время активности: {duration}",
656
+ "loading.label": "Загрузка субагентов…",
657
+ "loading.aria": "Загрузка субагентов",
658
+ "load.error": "Не удалось загрузить субагентов",
659
+ "retry": "Повторить",
660
+ "mode.oneShot": "одноразовый",
661
+ "mode.continuable": "можно продолжить",
662
+ "activity.running": "выполняется",
663
+ "activity.inactive": "не выполняется",
664
+ "branch.collapse": "Свернуть потомков {label}",
665
+ "branch.expand": "Развернуть потомков {label}",
666
+ "count.total.one": "{count} субагент",
667
+ "count.total.other": "{count} субагентов",
668
+ "count.running.one": "{count} субагент выполняется",
669
+ "count.running.other": "{count} субагентов выполняется",
670
+ "switcher.aria": "Переключить субагента: {title}",
671
+ "tree.aria": "Сессии субагентов",
672
+ "readonly.oneShot.title": "Запись одноразового субагента",
673
+ "readonly.title": "Этот субагент пока доступен только для чтения",
674
+ "readonly.oneShot.body": "Одноразовые задачи не принимают продолжений; здесь можно посмотреть полную запись выполнения.",
675
+ "readonly.body": "Родительская сессия сейчас не в сети; откройте её заново, чтобы продолжить отправку сообщений.",
676
+ "tokens.thousand": "{value} тыс.",
677
+ "tokens.million": "{value} млн",
678
+ "tokens.total": "{value} ток"
679
+ },
680
+ "settings.theme": {
681
+ "appearance.title": "Оформление",
682
+ "appearance.light": "Светлая",
683
+ "appearance.dark": "Тёмная",
684
+ "appearance.system": "Как в системе",
685
+ "fontSize.title": "Размер шрифта",
686
+ "fontSize.description": "Влияет только на содержимое беседы",
687
+ "fontSize.unit": "px",
688
+ "fontSize.increase": "Увеличить размер шрифта",
689
+ "fontSize.decrease": "Уменьшить размер шрифта"
690
+ },
691
+ "trajectory": {
692
+ "view.trajectory": "Траектория",
693
+ "toolbar.aria": "Панель траектории",
694
+ "toolbar.duration": "Длительность",
695
+ "toolbar.useActualDuration": "Фактическая длительность",
696
+ "toolbar.useEqualWidth": "Равная ширина операций",
697
+ "toolbar.actualTime": "Фактическое время",
698
+ "toolbar.turns": "Раунды",
699
+ "toolbar.expandTurns": "Развернуть раунды",
700
+ "toolbar.collapseTurns": "Свернуть раунды",
701
+ "toolbar.calls": "Вызовы",
702
+ "toolbar.expandCalls": "Развернуть вызовы",
703
+ "toolbar.collapseCalls": "Свернуть вызовы",
704
+ "toolbar.search": "Поиск по траектории",
705
+ "toolbar.searchPlaceholder": "Поиск",
706
+ "column.input": "Ввод",
707
+ "column.model": "Модель",
708
+ "column.tools": "Инструменты",
709
+ "status.pending": "Ожидает",
710
+ "timing.notAvailable": "Недоступно",
711
+ "timing.notRecorded": "Не записано",
712
+ "timing.stepStartUnavailable": "Недоступно время начала шага",
713
+ "timing.firstTokenUnavailable": "Недоступно время первого токена",
714
+ "timing.usageUnavailable": "Данные об использовании недоступны",
715
+ "timing.outputTokensUnavailable": "Недоступно число выходных токенов",
716
+ "timing.durationTooShort": "Длительность слишком мала",
717
+ "timing.started": "Начало",
718
+ "timing.totalDuration": "Общая длительность",
719
+ "timing.ttft": "TTFT",
720
+ "timing.generation": "Генерация",
721
+ "timing.throughput": "Пропускная способность",
722
+ "timing.duration": "Длительность",
723
+ "timing.source": "Источник времени",
724
+ "timing.sessionTimestamps": "Метки времени сессии",
725
+ "timing.sessionTimestampsRunning": "Метки времени сессии (выполняется)",
726
+ "usage.input": "Ввод",
727
+ "tab.tools": "Инструменты",
728
+ "record.noContent": "Нет содержимого",
729
+ "record.noPayload": "Ввод не зафиксирован",
730
+ "record.noResult": "Результат не зафиксирован",
731
+ "record.resultJson": "Результат JSON",
732
+ "record.outputJson": "Результат JSON",
733
+ "record.thinking": "Рассуждение",
734
+ "record.tools": "Инструменты",
735
+ "block.openSummaryTitle": "Открыть сводку вызова",
736
+ "history.loadingEarlier": "Загрузка более ранней истории…",
737
+ "history.loadingEarlierAria": "Загрузка более ранней истории…",
738
+ "history.loadEarlier": "Загрузить более раннюю историю",
739
+ "history.clickToLoadEarlier": "Нажмите, чтобы загрузить более раннюю историю",
740
+ "details.event": "Детали события",
741
+ "details.resize": "Изменить размер панели деталей",
742
+ "details.resizeTitle": "Перетащите, чтобы изменить размер. Двойной клик — сброс.",
743
+ "details.close": "Закрыть детали",
744
+ "details.model": "Модель",
745
+ "timeline.aria": "Таймлайн траектории",
746
+ "timeline.overviewAria": "Обзор таймлайна; перетаскивайте по горизонтали, чтобы фокусироваться на событиях",
747
+ "timeline.noTimingData": "Нет данных о времени",
748
+ "timeline.total": "Всего: {duration}",
749
+ "timeline.started": "Начало: {time}",
750
+ "layout.toolCallOnly": "Только вызов инструмента",
751
+ "kind.system": "SYSTEM",
752
+ "kind.user": "USER",
753
+ "kind.context": "CONTEXT",
754
+ "kind.compacted": "COMPACTED",
755
+ "kind.message": "Сообщение",
756
+ "kind.assistant": "ASSISTANT",
757
+ "kind.tool": "TOOL",
758
+ "kind.subtool": "SUBTOOL",
759
+ "kind.sub": "Sub",
760
+ "column.output": "Вывод",
761
+ "column.think": "Размышление",
762
+ "column.time": "Время",
763
+ "turn.label": "Ход {turn}",
764
+ "section.betweenTurns": "Между ходами",
765
+ "group.message": "Сообщение",
766
+ "group.step": "Шаг {step}",
767
+ "group.compaction": "Сжатие {seq}",
768
+ "status.failed": "Ошибка",
769
+ "status.completed": "Завершено",
770
+ "timing.showLocalTime": "Показать локальное время",
771
+ "timing.showUnixTimestamp": "Показать Unix-метку времени",
772
+ "timing.request": "Время запроса",
773
+ "unit.milliseconds": "{value} мс",
774
+ "unit.seconds": "{value} с",
775
+ "unit.tokens": "{value} ток",
776
+ "unit.tokensPerSecond": "{value} ток/с",
777
+ "usage.tokens": "Токены",
778
+ "usage.reasoning": "Размышление",
779
+ "usage.content": "Содержимое",
780
+ "usage.notReported": "Данные об использовании не сообщаются",
781
+ "usage.cached": "Из кэша",
782
+ "usage.cacheCreated": "Запись в кэш",
783
+ "usage.other": "Прочее",
784
+ "usage.output": "Выход",
785
+ "usage.thisRequest": "Этот запрос",
786
+ "usage.sessionCumulative": "Суммарно по сессии",
787
+ "options.notRecorded": "Параметры не записаны",
788
+ "options.json": "JSON параметров запроса",
789
+ "source.unknown": "Неизвестно",
790
+ "source.user": "Пользователь",
791
+ "source.plugin": "Плагин",
792
+ "source.pluginNamed": "Плагин · {plugin}",
793
+ "source.goal": "Цель",
794
+ "source.goalRound": "Цель · Раунд {round}",
795
+ "source.notRecorded": "Источник не записан",
796
+ "source.messageJson": "JSON источника сообщения",
797
+ "tab.summary": "Сводка",
798
+ "tab.rawOutput": "Исходный вывод",
799
+ "tab.preview": "Предпросмотр",
800
+ "tab.raw": "Исходный текст",
801
+ "tab.source": "Источник",
802
+ "tab.payload": "Запрос",
803
+ "tab.result": "Результат",
804
+ "tab.schema": "Схема",
805
+ "tab.timing": "Время",
806
+ "tab.diff": "Дифф",
807
+ "tab.systemPrompt": "Системный промпт",
808
+ "tab.options": "Параметры",
809
+ "tab.usage": "Использование",
810
+ "record.toolCallOnly": "(только вызов инструмента)",
811
+ "record.noOutput": "Нет вывода",
812
+ "record.schemaUnavailable": "Схема недоступна",
813
+ "record.parameters": "Параметры",
814
+ "record.json": "JSON",
815
+ "record.parametersJson": "JSON параметров",
816
+ "record.namedParametersJson": "JSON параметров {name}",
817
+ "record.payloadJson": "JSON запроса",
818
+ "record.systemPromptMissing": "В этом запросе нет системного промпта",
819
+ "record.toolsMissing": "В этом запросе нет инструментов",
820
+ "record.systemPrompt": "Системный промпт",
821
+ "block.openSummary": "Открыть сводку вызова инструментов для блока #{index}",
822
+ "block.label": "Блок #{index} {type}",
823
+ "history.loadingTrajectory": "Загрузка траектории…",
824
+ "request.label": "Запрос #{request}",
825
+ "request.labelCompaction": "Запрос #{request} · Сжатие",
826
+ "request.compaction": "Сжатие · {section}",
827
+ "request.compactionPurpose": "Сжатие",
828
+ "request.retryProgress": "{retry} из {maximum}",
829
+ "request.collapsedSummary": "Свёрнутая сводка {kind}, {summary}",
830
+ "request.collapsedTurn": "хода",
831
+ "request.collapsedAssistant": "ассистента",
832
+ "request.rowAria": "{request}{kind}, {content}",
833
+ "request.rowPrefix": "Запрос {request}, ",
834
+ "request.rowAriaCompaction": "Запрос {request}, сжатие",
835
+ "request.noContent": "нет содержимого",
836
+ "summary.toolCalls.one": "{count} вызов инструмента",
837
+ "summary.toolCalls.other": "{count} вызовов инструментов",
838
+ "summary.steps.one": "{count} шаг",
839
+ "summary.steps.other": "{count} шагов",
840
+ "details.status": "Состояние",
841
+ "details.purpose": "Назначение",
842
+ "details.provider": "Провайдер",
843
+ "details.toolCalls": "Вызовы инструментов",
844
+ "details.subtoolCalls": "Вложенные вызовы",
845
+ "details.error": "Ошибка",
846
+ "details.failure.auth": "Недействительный API-ключ",
847
+ "details.retry": "Повтор",
848
+ "details.scheduled": "Запланирован",
849
+ "details.retryDelay": "Задержка повтора",
850
+ "details.result": "Результат",
851
+ "details.compacted": "Сжато",
852
+ "details.assistantMessage": "Сообщение ассистента",
853
+ "details.source": "Источник",
854
+ "details.hierarchy": "Иерархия",
855
+ "details.toolCall": "Вызов инструмента",
856
+ "timeline.ttftDecoding": "TTFT {ttft} · Декодирование {decoding}",
857
+ "layout.compacting": "Сжатие контекста…",
858
+ "layout.compactionFailed": "Сжатие не удалось",
859
+ "layout.compacted": "Контекст сжат",
860
+ "layout.imageOnly": "Изображения ×{count}",
861
+ "layout.initialSystemPrompt": "Начальный системный промпт",
862
+ "layout.systemPromptUpdated": "Системный промпт обновлён",
863
+ "layout.toolsUpdated": "Инструменты обновлены",
864
+ "layout.systemPromptAndToolsUpdated": "Системный промпт и инструменты обновлены",
865
+ "layout.compactionInterrupted": "Сжатие было прервано до завершения."
866
+ },
867
+ "question": {
868
+ "error.incomplete": "Сначала завершите этот вопрос.",
869
+ "error.unanswered": "Выберите вариант или введите свой ответ.",
870
+ "nav.prev": "Предыдущий вопрос",
871
+ "nav.next": "Следующий вопрос",
872
+ "nav.minimize": "Свернуть карточку вопроса",
873
+ "nav.maximize": "Развернуть карточку вопроса",
874
+ "nav.cancel": "Отменить все вопросы",
875
+ "option.recommended": "Рекомендуется",
876
+ "custom.placeholder": "Введите ваш ответ",
877
+ "action.skip": "Пропустить вопрос",
878
+ "action.next": "Далее",
879
+ "plan.header": "План на рассмотрении",
880
+ "plan.approve": "Утвердить",
881
+ "plan.decline": "Отклонить",
882
+ "plan.discuss": "Обсудить в чате"
883
+ },
884
+ "workflowRun": {
885
+ "run.title": "{name}",
886
+ "run.members.one": "{count} участник",
887
+ "run.members.other": "{count} участников",
888
+ "run.empty": "Участники не запущены",
889
+ "phase.unassigned": "Без фазы",
890
+ "phase.empty": "Пустое имя фазы",
891
+ "statusCount.running": "Выполняется: {count}",
892
+ "statusCount.completed": "Завершено: {count}",
893
+ "statusCount.failed": "Ошибка: {count}",
894
+ "statusCount.cancelled": "Отменено: {count}",
895
+ "statusCount.interrupted": "Прервано: {count}",
896
+ "member.empty": "Пустое имя участника",
897
+ "member.open": "Открыть {name}",
898
+ "status.running": "Выполняется",
899
+ "status.completed": "Завершено",
900
+ "status.failed": "Ошибка",
901
+ "status.cancelled": "Отменено",
902
+ "status.interrupted": "Прервано"
903
+ },
904
+ "workspace": {
905
+ "group.ungrouped": "Без группы",
906
+ "session.new": "Новая сессия",
907
+ "section.workspaces": "Рабочие пространства",
908
+ "section.sessions": "Сессии",
909
+ "viewOptions.label": "Параметры вида",
910
+ "groupBy.label": "Группировка",
911
+ "groupBy.workspace": "По рабочим пространствам",
912
+ "groupBy.flat": "Единым списком",
913
+ "orderBy.label": "Сортировка",
914
+ "orderBy.manual": "Вручную",
915
+ "orderBy.updated": "По обновлению",
916
+ "sessions.expand": "Показать ещё {n}",
917
+ "sessions.collapse": "Свернуть",
918
+ "empty.none": "Пока нет сессий",
919
+ "empty.noMatches": "Ничего не найдено",
920
+ "workspace.add": "Добавить рабочее пространство",
921
+ "search.sessions.aria": "Поиск сессий",
922
+ "search.placeholder": "Поиск сессий…",
923
+ "search.clear": "Очистить поиск",
924
+ "search.results.aria": "Результаты поиска",
925
+ "search.pending": "Поиск по истории сессий…",
926
+ "search.unavailable": "Контентный поиск временно недоступен. Показываем совпадения по имени.",
927
+ "search.noMatches": "Нет подходящих сессий",
928
+ "search.hasMore": "Показаны первые {n}. Сузьте поиск.",
929
+ "menu.addWorkspace": "Добавить рабочее пространство…",
930
+ "picker.loading": "Загрузка рабочих пространств…",
931
+ "conflict.named": "Рабочее пространство с именем «{name}» уже существует.",
932
+ "folderError.title": "Не удалось открыть папку",
933
+ "folderError.retry": "Выбрать снова",
934
+ "rename": "Переименовать",
935
+ "rename.workspace.title": "Переименовать рабочее пространство",
936
+ "rename.session.title": "Переименовать сессию",
937
+ "field.workspaceName": "Имя рабочего пространства",
938
+ "field.sessionName": "Имя сессии",
939
+ "delete.workspace": "Удалить рабочее пространство",
940
+ "delete.desc": "Это удалит «{name}» из списка рабочих пространств. Папка и журналы сессий сохранятся; их сессии появятся в разделе «Без группы».",
941
+ "delete.pending": "Удаление рабочего пространства…",
942
+ "menu.fork": "Создать ответвление сессии",
943
+ "menu.archiveSession": "Архивировать сессию",
944
+ "sessions.count.one": "{n} сессия",
945
+ "sessions.count.other": "{n} сессий",
946
+ "actions.workspace.aria": "Действия рабочего пространства {name}",
947
+ "actions.session.aria": "Действия сессии {name}",
948
+ "actions.newSession.aria": "Новая сессия в {name}",
949
+ "status.running": "Выполняется",
950
+ "status.subagentsRunning.one": "{n} субагент выполняется",
951
+ "status.subagentsRunning.other": "{n} субагентов выполняется",
952
+ "status.idle": "Ожидает",
953
+ "status.waitingApproval": "Ожидает одобрения",
954
+ "status.planReview": "План на рассмотрении",
955
+ "status.waitingAnswer": "Ожидает ответа",
956
+ "status.completed": "Завершено",
957
+ "schedule.active": "Есть активная запланированная задача",
958
+ "hover.created": "Создано {time}",
959
+ "hover.copied": "Скопировано",
960
+ "date.ymd": "{d}.{m}.{y}",
961
+ "time.now": "только что",
962
+ "time.minutes": "{n} мин",
963
+ "time.hours": "{n} ч",
964
+ "time.days": "{n} д",
965
+ "time.months": "{n} мес",
966
+ "time.years": "{n} г",
967
+ "time.ago": "{t} назад"
968
+ },
969
+ "agent-team": {
970
+ "memberStatus.running": "Выполняется",
971
+ "memberStatus.idle": "Простой",
972
+ "memberStatus.inactive": "Неактивен",
973
+ "memberStatus.provisioning": "Подготовка",
974
+ "memberStatus.failed": "Ошибка",
975
+ "status.pending": "Ожидание",
976
+ "status.in_progress": "В процессе",
977
+ "status.completed": "Завершено",
978
+ "trigger": "Команда агентов",
979
+ "refresh": "Обновить команду",
980
+ "close": "Закрыть",
981
+ "loading": "Загрузка команды…",
982
+ "empty": "Общих задач пока нет",
983
+ "roster": "Участники",
984
+ "tasks": "Общие задачи",
985
+ "model": "Модель",
986
+ "open": "Открыть диалог с участником",
987
+ "create": "Новая задача",
988
+ "subject": "Тема задачи",
989
+ "description": "Описание задачи",
990
+ "blockers": "ID блокирующих задач (через запятую)",
991
+ "scopes": "Области записи (через запятую)",
992
+ "save": "Сохранить",
993
+ "cancel": "Отмена",
994
+ "edit": "Изменить",
995
+ "complete": "Завершить",
996
+ "reopen": "Открыть заново",
997
+ "delete": "Удалить",
998
+ "owner": "Исполнитель",
999
+ "unowned": "Без исполнителя",
1000
+ "blockedBy": "Блокируется",
1001
+ "writeScopes": "Области записи",
1002
+ "ready": "Готово к работе",
1003
+ "blocked": "Заблокировано зависимостями",
1004
+ "conflict": "Состояние задачи изменилось, она перезагружена. Проверьте её перед повтором."
1005
+ },
1006
+ "cordis": {
1007
+ "row.defineTitle": "Зарегистрировать плагин Cordis",
1008
+ "row.runTitle": "Запустить плагин Cordis",
1009
+ "row.updateTitle": "Обновить плагин Cordis",
1010
+ "row.stopTitle": "Остановить плагин Cordis",
1011
+ "row.removeTitle": "Удалить плагин Cordis",
1012
+ "purpose.missing": "(цель не указана)",
1013
+ "status.idle": "Готов",
1014
+ "status.awaitingApproval": "Ожидает одобрения",
1015
+ "status.failed": "Ошибка запуска",
1016
+ "status.clientPending": "Client готов к активации",
1017
+ "status.running": "Выполняется",
1018
+ "status.removed": "Удалён",
1019
+ "status.superseded": "Доступен более новый запуск",
1020
+ "run.removed": "Этого пакета больше не существует",
1021
+ "run.superseded": "Ниже доступна более новая карточка запуска",
1022
+ "panel.hint": "Управление запуском находится на панели Cordis над настройками",
1023
+ "panel.plugins.aria": "Плагины Cordis",
1024
+ "panel.approvals.aria": "Одобрения Cordis",
1025
+ "panel.trigger": "Плагин Cordis",
1026
+ "panel.runningCount": "{count} в работе",
1027
+ "panel.title": "Плагины Cordis",
1028
+ "panel.empty": "Плагины ещё не определены",
1029
+ "panel.loading": "Чтение…",
1030
+ "panel.readFailed": "Не удалось прочитать список плагинов: {message}",
1031
+ "panel.group.current": "Эта сессия",
1032
+ "panel.group.others": "Другие сессии",
1033
+ "panel.version": "Версия",
1034
+ "panel.current": "Текущая: {packageId}",
1035
+ "panel.next": "Следующая: {packageId}",
1036
+ "action.approve": "Разрешить",
1037
+ "action.approveOnce": "Разрешить только эту версию",
1038
+ "action.approvePlugin": "Разрешить будущие версии этого плагина",
1039
+ "action.decline": "Отклонить",
1040
+ "action.run": "Запустить",
1041
+ "action.stop": "Остановить",
1042
+ "action.remove": "Удалить",
1043
+ "action.retry": "Повторить",
1044
+ "action.rollback": "Откатить",
1045
+ "action.inspect": "Просмотр",
1046
+ "render.failedAbdicated": "Сбой рендеринга в {slot}; восстановлен интерфейс по умолчанию:",
1047
+ "render.failedHeld": "Сбой рендеринга в {slot}:",
1048
+ "a11y.defining": "Идёт определение плагина",
1049
+ "a11y.failed": "Определение не удалось",
1050
+ "a11y.stopped": "Определение прервано",
1051
+ "body.source": "Исходный код плагина",
1052
+ "body.hostCode": "Хост",
1053
+ "body.clientCode": "Клиент",
1054
+ "body.output": "Результат",
1055
+ "body.copy": "Копировать",
1056
+ "body.copied": "Скопировано"
1057
+ },
1058
+ "session-log-download": {
1059
+ "header.action": "Журнал сессии",
1060
+ "dialog.preparingTitle": "Экспорт сессии",
1061
+ "dialog.preparingDescription": "Готовится ZIP-архив с этой сессией, её подсессиями и вложениями.",
1062
+ "dialog.successTitle": "Загрузка сессии началась",
1063
+ "dialog.successDescription": "Браузер загружает ZIP-архив сессии.",
1064
+ "dialog.errorTitle": "Не удалось экспортировать сессию",
1065
+ "dialog.close": "Закрыть",
1066
+ "dialog.commandFailed": "Не удалось запустить экспорт сессии."
1067
+ },
1068
+ "chat": {
1069
+ "view.chat": "Чат",
1070
+ "number.groupSeparator": " ",
1071
+ "duration.compactSeconds": "{seconds} с",
1072
+ "duration.compactMinutes": "{minutes} мин {seconds} с",
1073
+ "duration.milliseconds": "{milliseconds} мс",
1074
+ "stats.counts": "{turns} ходов · {steps} шагов",
1075
+ "stats.llm": "LLM {duration}",
1076
+ "stats.toolCall": "Вызов инструмента {duration}",
1077
+ "stats.ttftAverage": "Среднее время до первого токена: {duration}",
1078
+ "stats.tokensPerSecond": "{throughput} ток/с",
1079
+ "stats.cacheHit": "Попадание в кэш {percent}%",
1080
+ "stats.tokens": "Вход {input} ток · Выход {output} ток",
1081
+ "details.title": "Подробности",
1082
+ "details.close": "Закрыть подробности",
1083
+ "details.empty": "Нажмите на строку инструмента в потоке сообщений, чтобы увидеть подробности",
1084
+ "details.notInWindow": "Этот вызов вне текущего окна",
1085
+ "details.input": "Ввод",
1086
+ "details.output": "Вывод",
1087
+ "details.running": "Выполняется…",
1088
+ "chat.loadingHistory": "Загрузка истории…",
1089
+ "chat.loadError": "Не удалось загрузить историю: {message} ({code})",
1090
+ "chat.loadOlder": "Загрузить ранее",
1091
+ "chat.toBottom": "Вниз",
1092
+ "chat.deepDiving": "Глубокое исследование…",
1093
+ "chat.turnNavigation.label": "Навигация по ходам",
1094
+ "chat.turnNavigation.jump": "Перейти к ходу {turn}",
1095
+ "chat.turnNavigation.jumpLoad": "Загрузить и перейти к ходу {turn}",
1096
+ "chat.turnNavigation.turn": "Ход {turn}",
1097
+ "settings.transcript.title": "Отображение диалога",
1098
+ "settings.transcript.description": "Управляет содержимым процесса в завершённых ходах",
1099
+ "settings.transcript.normal": "Обычный",
1100
+ "settings.transcript.compact": "Компактный",
1101
+ "fileOpen.title": "Не удалось открыть файл",
1102
+ "fileOpen.unknown": "Не удалось открыть этот файл",
1103
+ "fileOpen.folderTitle": "Не удалось открыть папку",
1104
+ "fileOpen.folderUnknown": "Не удалось открыть эту папку",
1105
+ "message.extraBlock": "Дополнительный блок содержимого",
1106
+ "message.systemPrompt": "Системный промпт",
1107
+ "message.contextInjection": "Инъекция контекста",
1108
+ "message.contextRecall": "Межсессонный поиск",
1109
+ "message.referenceSummary": "Ссылка на сессию · {labels}",
1110
+ "message.referenceSeparator": ", ",
1111
+ "message.context.instructions.loaded": "загружено",
1112
+ "message.context.instructions.added": "добавлено",
1113
+ "message.context.instructions.updated": "обновлено",
1114
+ "message.context.instructions.removed": "удалено",
1115
+ "message.context.catalog.replaced": "Заменённый каталог",
1116
+ "message.context.catalog.more": "… ещё {count}",
1117
+ "message.context.snapshot.supersedes": "Заменяет предыдущие снимки",
1118
+ "message.context.relay.from": "Из сессии {session}",
1119
+ "message.context.recall.counts": "Сохранено {retained} · Пропущено {omitted}",
1120
+ "message.context.recall.truncated": "обрезано",
1121
+ "message.compaction": "Контекст сжат",
1122
+ "message.compaction.running": "Сжатие контекста…",
1123
+ "message.compaction.completed": "Сжато {items} записей истории (~{tokens} токенов)",
1124
+ "message.compaction.expand": "Показать сводку сжатия",
1125
+ "message.compaction.unavailable": "Сводка сжатия недоступна",
1126
+ "message.compaction.commandTitle": "compact",
1127
+ "message.think": "Размышление",
1128
+ "message.unknownSurface": "Неизвестное surface-событие: {type}",
1129
+ "message.unknownBlock": "Неизвестный блок содержимого",
1130
+ "message.turnProcess.toolCalls.one": "{count} вызов инструмента",
1131
+ "message.turnProcess.toolCalls.other": "{count} вызовов инструментов",
1132
+ "message.turnProcess.messages.one": "{count} сообщение",
1133
+ "message.turnProcess.messages.other": "{count} сообщений",
1134
+ "message.turnProcess.subagents.one": "{count} субагент",
1135
+ "message.turnProcess.subagents.other": "{count} субагентов",
1136
+ "message.turnProcess.thoughtForAWhile": "Думал некоторое время",
1137
+ "message.turnProcess.separator": " · ",
1138
+ "message.stopped": "Остановлено",
1139
+ "message.branch": "Ответвить новый диалог",
1140
+ "message.branchUnavailable": "Доступно только на последнем сообщении завершённого хода",
1141
+ "message.retry.active": "Повтор запроса к модели",
1142
+ "message.retry.cancelled": "Повтор запроса к модели отменён",
1143
+ "message.retry.started": "Запрос к модели повторён",
1144
+ "message.retry.scheduled": "Ожидание повтора запроса к модели",
1145
+ "message.retry.status": "{label} ({retry}/{maximum}) · {seconds} с",
1146
+ "message.retry.delay": "Задержка повтора: ",
1147
+ "message.retry.failure": "Причина сбоя: ",
1148
+ "message.failure.auth": "Недействительный API-ключ",
1149
+ "message.turnError": "Этот ход завершился с ошибкой",
1150
+ "message.maxTokens": "Достигнут лимит выходных токенов",
1151
+ "message.maxTokens.hint": "Ответ обрезан; уже выведенное сохранено в диалоге. Отправьте «продолжай», чтобы модель завершила ответ.",
1152
+ "message.ranFor": "Выполнялся {duration}",
1153
+ "message.tokensPerSecond": "{tps} ток/с",
1154
+ "message.turnUsage.title": "Расход хода",
1155
+ "message.turnUsage.consumed": "Расход {total}",
1156
+ "message.turnUsage.model": "Провайдер / модель",
1157
+ "message.turnUsage.cacheHit": "Попадание в кэш",
1158
+ "message.turnUsage.input": "Вход без кэша",
1159
+ "message.turnUsage.cacheRead": "Чтение из кэша",
1160
+ "message.turnUsage.cacheWrite": "Запись в кэш",
1161
+ "message.turnUsage.output": "Выход",
1162
+ "message.turnUsage.reasoning": " (из них размышление {tokens})",
1163
+ "message.turnUsage.count": "{count} ток",
1164
+ "message.turnTime.title": "Время и скорость хода",
1165
+ "message.turnTime.duration": "Общее время хода",
1166
+ "message.turnTime.speed": "Скорость вывода (TPS)",
1167
+ "message.turnTime.ttft": "Время до первого токена (TTFT)",
1168
+ "duration.seconds": "{seconds} с",
1169
+ "duration.minutes": "{minutes} мин {seconds} с",
1170
+ "command.running": "Выполняется…",
1171
+ "command.failed": "Команда завершилась с ошибкой",
1172
+ "command.done": "Завершено",
1173
+ "command.title": "Команда",
1174
+ "row.running": "Выполняется",
1175
+ "row.failed": "Ошибка",
1176
+ "json.truncated": "… обрезано, всего {total} символов",
1177
+ "clock.md": "{d}.{m}",
1178
+ "clock.ymd": "{d}.{m}.{y}"
1179
+ },
1180
+ "directory-browser": {
1181
+ "browser.title": "Выбор рабочего каталога",
1182
+ "browser.home": "Домой",
1183
+ "browser.newFolder": "Новая папка",
1184
+ "browser.folderName": "Имя папки",
1185
+ "browser.createIn": "Новая папка в \"{name}\"",
1186
+ "browser.untitledFolder": "Папка без имени",
1187
+ "browser.create": "Создать",
1188
+ "browser.cancel": "Отмена",
1189
+ "browser.open": "Открыть",
1190
+ "browser.editPath": "Изменить путь",
1191
+ "browser.loading": "Загрузка…",
1192
+ "browser.truncated": "Слишком много папок; показано только начало списка.",
1193
+ "browser.showHidden": "Показывать скрытые файлы"
1194
+ }
1195
+ };
1196
+ //#endregion
1197
+ //#region src/client/index.ts
1198
+ /** Required service: the locale registry that owns languages and dictionaries. */
1199
+ const inject = ["locale"];
1200
+ /**
1201
+ * Client plugin body: add `ru` to the selectable language catalog and register
1202
+ * a ru dictionary for every namespace this pack contributes. Registration is
1203
+ * an effect, so the contributed language and dictionaries are torn down with
1204
+ * this plugin's fiber.
1205
+ * @param ctx - client root context.
1206
+ */
1207
+ function apply(ctx) {
1208
+ ctx.effect(() => ctx.locale.addLanguage({
1209
+ id: "ru",
1210
+ label: RU_LABEL,
1211
+ fallback: "en"
1212
+ }), "locale-ru: language");
1213
+ for (const [ns, dict] of Object.entries(RU_DICTS)) ctx.effect(() => ctx.locale.register(ns, "ru", dict), `locale-ru: ${ns} dictionary`);
1214
+ }
1215
+ //#endregion
1216
+ exports.apply = apply;
1217
+ exports.inject = inject;
1218
+ return module.exports;
1219
+ }
1220
+ });
1221
+
1222
+ //# sourceMappingURL=client.js.map