termux-dev 1.5.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +215 -163
  2. package/assets/banner.svg +23 -28
  3. package/assets/preview.png +0 -0
  4. package/assets/preview.svg +94 -0
  5. package/dist/cli/banner.js +7 -3
  6. package/dist/cli/clipboard-write.js +55 -0
  7. package/dist/cli/clipboard.js +182 -106
  8. package/dist/cli/colors.js +67 -0
  9. package/dist/cli/confirm.js +50 -0
  10. package/dist/cli/doctor.js +4 -4
  11. package/dist/cli/effort.js +80 -0
  12. package/dist/cli/export.js +3 -3
  13. package/dist/cli/files.js +19 -5
  14. package/dist/cli/headless.js +29 -14
  15. package/dist/cli/index.js +1395 -474
  16. package/dist/cli/keys.js +69 -0
  17. package/dist/cli/liveblock.js +45 -0
  18. package/dist/cli/log.js +19 -0
  19. package/dist/cli/markdown.js +158 -36
  20. package/dist/cli/mcp-panel.js +432 -0
  21. package/dist/cli/permission.js +84 -0
  22. package/dist/cli/picker.js +135 -0
  23. package/dist/cli/prompt.js +338 -121
  24. package/dist/cli/prompt_palette.js +6 -0
  25. package/dist/cli/resume.js +15 -0
  26. package/dist/cli/rewind.js +51 -0
  27. package/dist/cli/runtime_errors.js +6 -0
  28. package/dist/cli/server.js +85 -24
  29. package/dist/cli/settings.js +307 -0
  30. package/dist/cli/statusline.js +27 -1
  31. package/dist/cli/theme.js +126 -108
  32. package/dist/cli/transcript.js +114 -0
  33. package/dist/cli/typeahead.js +371 -0
  34. package/dist/cli/ui.js +1021 -0
  35. package/dist/cli/updater.js +23 -21
  36. package/dist/cli/usage-panel.js +242 -0
  37. package/dist/cli/width.js +178 -0
  38. package/dist/core/capabilities.js +433 -0
  39. package/dist/core/catalog-util.js +27 -0
  40. package/dist/core/checkpoint.js +90 -0
  41. package/dist/core/context-stats.js +29 -0
  42. package/dist/core/cost.js +191 -0
  43. package/dist/core/formats.js +199 -0
  44. package/dist/core/history.js +51 -1
  45. package/dist/core/hooks.js +79 -0
  46. package/dist/core/i18n.js +42 -0
  47. package/dist/core/local-config.js +69 -0
  48. package/dist/core/locales/de.js +210 -0
  49. package/dist/core/locales/en.js +221 -0
  50. package/dist/core/locales/es.js +210 -0
  51. package/dist/core/locales/fr.js +210 -0
  52. package/dist/core/locales/ja.js +210 -0
  53. package/dist/core/locales/pt.js +210 -0
  54. package/dist/core/locales/ru.js +210 -0
  55. package/dist/core/locales/uk.js +210 -0
  56. package/dist/core/locales/zh.js +210 -0
  57. package/dist/core/loop.js +125 -49
  58. package/dist/core/memory.js +39 -12
  59. package/dist/core/models.js +33 -20
  60. package/dist/core/network.js +12 -11
  61. package/dist/core/notify.js +54 -0
  62. package/dist/core/planfile.js +43 -0
  63. package/dist/core/price-catalog.json +1 -0
  64. package/dist/core/prices.js +249 -0
  65. package/dist/core/reasoning-catalog.json +1 -0
  66. package/dist/core/reasoning.js +393 -0
  67. package/dist/core/redact.js +41 -0
  68. package/dist/core/secure-file.js +22 -0
  69. package/dist/core/session.js +16 -5
  70. package/dist/core/snapshot.js +14 -2
  71. package/dist/core/title.js +61 -0
  72. package/dist/core/types.js +1 -1
  73. package/dist/core/usage.js +43 -7
  74. package/dist/core/vision-catalog.json +1 -0
  75. package/dist/core/vision.js +123 -0
  76. package/dist/mcp/client.js +36 -5
  77. package/dist/mcp/http-client.js +174 -0
  78. package/dist/mcp/manager.js +330 -93
  79. package/dist/permissions/guard.js +385 -117
  80. package/dist/prompts/builder.js +46 -38
  81. package/dist/providers/anthropic.js +517 -0
  82. package/dist/providers/index.js +18 -1
  83. package/dist/providers/openai.js +138 -125
  84. package/dist/providers/shared.js +116 -0
  85. package/dist/providers/toolguard.js +101 -0
  86. package/dist/tools/bash.js +141 -51
  87. package/dist/tools/diagnostics.js +76 -48
  88. package/dist/tools/fs.js +77 -5
  89. package/dist/tools/index.js +2 -1
  90. package/dist/tools/mcp.js +72 -0
  91. package/dist/tools/packages.js +16 -1
  92. package/dist/tools/plan.js +8 -8
  93. package/dist/tools/questions.js +50 -54
  94. package/dist/tools/server.js +6 -0
  95. package/dist/tools/todo.js +20 -18
  96. package/dist/tools/web.js +143 -8
  97. package/package.json +4 -2
  98. package/assets/preview_work1.png +0 -0
@@ -0,0 +1,210 @@
1
+ export const ru = {
2
+ 'net.unknown': 'Неизвестная ошибка сети',
3
+ 'net.rateLimit': 'Превышен лимит запросов API (429)',
4
+ 'net.badGateway': 'Шлюз провайдера временно недоступен (502)',
5
+ 'net.unavailable': 'Сервер провайдера перегружен (503)',
6
+ 'net.gatewayTimeout': 'Таймаут шлюза провайдера (504)',
7
+ 'net.offline': 'Нет подключения к сети или сбой DNS (offline)',
8
+ 'net.reset': 'Обрыв соединения с сервером',
9
+ 'net.timeout': 'Таймаут сетевого соединения',
10
+ 'net.refused': 'Сервер отклонил подключение',
11
+ 'net.fetchFailed': 'Сбой сетевого запроса (соединение оборвано)',
12
+ 'net.generic': 'Сбой интернет-соединения',
13
+ 'net.failedAfter': 'Ошибка сети: не удалось восстановить соединение после {n} попыток ({reason}).',
14
+ 'conn.unstable': 'соединение нестабильно ({reason})',
15
+ 'conn.reconnecting': 'переподключение {attempt}/{max} · повтор через {delay} с',
16
+ 'conn.restored': 'соединение восстановлено',
17
+ 'conn.classicUnstable': 'Интернет-соединение нестабильно ({reason})',
18
+ 'conn.classicRetry': 'Попытка переподключения [{attempt}/{max}] (пауза {delay} с)...',
19
+ 'conn.classicWaiting': 'Ожидание сети [{attempt}/{max}]...',
20
+ 'conn.classicRestored': '✓ Соединение восстановлено! Возобновляем генерацию...',
21
+ 'stop.connection': 'подключение отменено',
22
+ 'stop.stopped': 'остановлено',
23
+ 'stop.interrupted': 'прервано, отправляю ваше сообщение',
24
+ 'stop.classicConnection': 'Подключение отменено (Ctrl+C).',
25
+ 'stop.classicStopped': 'Ответ остановлен (Ctrl+C).',
26
+ 'stop.classicInterrupted': 'Прервано: отправляю ваше сообщение.',
27
+ 'status.waiting': 'Ожидание модели',
28
+ 'status.thinking': 'Думает',
29
+ 'status.writing': 'Пишет',
30
+ 'status.running': 'Выполняется',
31
+ 'status.reconnecting': 'Переподключение',
32
+ 'status.stop': 'ctrl+c — стоп',
33
+ 'status.thinkingLine': 'размышление',
34
+ 'status.thoughtFor': 'думал {sec} с',
35
+ 'composer.placeholder': 'Опишите задачу или задайте вопрос…',
36
+ 'composer.queued': 'в очереди',
37
+ 'composer.queuedMany': 'в очереди: {n}',
38
+ 'composer.queuedHint': 'ctrl+enter — отправить сразу · ↓ править',
39
+ 'composer.hint1': 'enter — в очередь · ctrl+c — стоп',
40
+ 'composer.hint2': 'enter — в очередь',
41
+ 'composer.hint3': 'enter — в очередь · ctrl+c — стоп',
42
+ 'composer.hint4': 'enter — в очередь',
43
+ 'summary.toolOne': 'инструментов: {n}',
44
+ 'summary.toolMany': 'инструментов: {n}',
45
+ 'summary.in': '{n} вход',
46
+ 'summary.out': '{n} выход',
47
+ 'summary.stopped': 'остановлено',
48
+ 'settings.title': 'настройки',
49
+ 'settings.section.appearance': 'Внешний вид',
50
+ 'settings.section.agent': 'Агент',
51
+ 'settings.section.general': 'Общие',
52
+ 'settings.section.about': 'О программе',
53
+ 'settings.row.theme': 'Тема',
54
+ 'settings.row.layout': 'Интерфейс',
55
+ 'settings.row.pureBlack': 'Чёрный фон',
56
+ 'settings.row.autoApprove': 'Автоодобрение (YOLO)',
57
+ 'settings.row.maxIterations': 'Макс. шагов',
58
+ 'settings.row.memory': 'Память проекта',
59
+ 'settings.row.updates': 'Проверка обновлений',
60
+ 'settings.row.language': 'Язык',
61
+ 'settings.row.about': 'О devx',
62
+ 'settings.short.theme': 'Тема',
63
+ 'settings.short.layout': 'Интерфейс',
64
+ 'settings.short.pureBlack': 'Чёрный фон',
65
+ 'settings.short.autoApprove': 'YOLO',
66
+ 'settings.short.maxIterations': 'Шагов',
67
+ 'settings.short.memory': 'Память',
68
+ 'settings.short.updates': 'Обновл.',
69
+ 'settings.short.language': 'Язык',
70
+ 'settings.short.about': 'О devx',
71
+ 'settings.value.on': 'вкл',
72
+ 'settings.value.off': 'выкл',
73
+ 'settings.value.clean': 'Чистый',
74
+ 'settings.value.classic': 'Классический',
75
+ 'settings.value.unlimited': 'без лимита',
76
+ 'settings.value.steps': '{n} шагов',
77
+ 'settings.hint.theme': 'Цвета всего интерфейса. Стрелки влево и вправо листают темы, панель перекрашивается сразу.',
78
+ 'settings.hint.layout': 'Чистый: рамка у ввода, карточки и спокойные строки инструментов. Классический: прежний ASCII-вид.',
79
+ 'settings.hint.pureBlack': 'Делает фон терминала глубоким чёрным для OLED (#0a0a0c). Выключено — остаётся ваш фон.',
80
+ 'settings.hint.autoApprove': 'Пропускает обычные запросы разрешений. Опасные команды и файлы с ключами всё равно спрашивают. Действует только в этой сессии: при следующем запуске devx выключено.',
81
+ 'settings.hint.maxIterations': 'Сколько шагов с инструментами (правки файлов, команды) агент может сделать на один запрос.',
82
+ 'settings.hint.memory': 'Загружает правила из .devx/memory.md в каждую сессию.',
83
+ 'settings.hint.updates': 'При запуске ищет новую версию devx на GitHub. Команда /update работает в любом случае.',
84
+ 'settings.hint.language': 'Язык интерфейса: сообщения, настройки и подсказки. Код и названия инструментов остаются английскими.',
85
+ 'settings.hint.about': 'Терминальный ИИ-агент для программирования от ApvCode. Лицензия MIT. github.com/apvcode/Termux-Dev',
86
+ 'settings.warnYolo': 'Включено: агент выполняет команды и правит файлы без вопросов.',
87
+ 'settings.keys.move': 'выбор',
88
+ 'settings.keys.change': 'изменить',
89
+ 'settings.keys.toggle': 'переключить',
90
+ 'settings.keys.close': 'закрыть',
91
+ // ── /mcp panel
92
+ 'mcp.title': 'MCP-серверы',
93
+ 'mcp.count': 'серверов: {n}',
94
+ 'mcp.scope.user': 'Ваши серверы',
95
+ 'mcp.scope.project': 'Серверы проекта',
96
+ 'mcp.toolsCount': 'инструментов: {n}',
97
+ 'mcp.status.connected': 'подключён',
98
+ 'mcp.status.connecting': 'подключается…',
99
+ 'mcp.status.failed': 'сбой',
100
+ 'mcp.status.disabled': 'отключён',
101
+ 'mcp.empty': 'MCP-серверы не настроены.',
102
+ 'mcp.emptyHint': 'Выполните /mcp import, чтобы взять серверы Claude Code, или /mcp add <имя> <команда> [аргументы].',
103
+ 'mcp.detail.status': 'Состояние',
104
+ 'mcp.detail.command': 'Команда',
105
+ 'mcp.detail.config': 'Конфиг',
106
+ 'mcp.detail.capabilities': 'Возможности',
107
+ 'mcp.detail.tools': 'Инструменты',
108
+ 'mcp.detail.error': 'Ошибка',
109
+ 'mcp.action.tools': 'Показать инструменты',
110
+ 'mcp.action.reconnect': 'Переподключить',
111
+ 'mcp.action.disable': 'Отключить',
112
+ 'mcp.action.enable': 'Включить',
113
+ 'mcp.toolsTitle': 'Инструменты {name}',
114
+ 'mcp.noTools': 'У этого сервера нет инструментов.',
115
+ 'mcp.tag.readOnly': 'только чтение',
116
+ 'mcp.tag.destructive': 'разрушающий',
117
+ 'mcp.tag.openWorld': 'внешний мир',
118
+ 'mcp.params': 'Параметры',
119
+ 'mcp.noParams': 'Без параметров.',
120
+ 'mcp.required': 'обязателен',
121
+ 'mcp.more': 'ещё {n}',
122
+ 'mcp.keys.open': 'открыть',
123
+ 'mcp.keys.back': 'назад',
124
+ 'mcp.keys.reload': 'перезагрузить все',
125
+ 'mcp.keys.close': 'закрыть',
126
+ // ── questions from the agent
127
+ 'questions.title': 'Вопрос',
128
+ 'questions.custom': 'Свой вариант…',
129
+ 'questions.skip': 'Пропустить',
130
+ 'questions.skipped': '(пропущено)',
131
+ 'questions.yourAnswer': 'Ваш ответ:',
132
+ 'questions.empty': 'Ответ не может быть пустым',
133
+ // ── confirmations
134
+ 'confirm.yes': 'Да',
135
+ 'confirm.no': 'Нет',
136
+ 'confirm.exitTitle': 'выход',
137
+ 'confirm.exit': 'Выйти из devx?',
138
+ 'confirm.goodbye': 'До встречи',
139
+ 'confirm.deleteAll': 'Удалить ВСЕ сохранённые сессии ({n})?',
140
+ 'confirm.update': 'Обновить devx до v{version} сейчас?',
141
+ 'confirm.commit': 'Закоммитить изменения с таким сообщением?',
142
+ 'trust.title': 'доверие к папке',
143
+ 'trust.question': 'Первый раз в этой папке. Доверять ей и разрешить агенту работать здесь?',
144
+ 'trust.yes': 'Да, доверять этой папке',
145
+ 'trust.no': 'Нет, выйти',
146
+ 'trust.wantsYolo': 'Конфиг проекта просит автоодобрение (YOLO)',
147
+ 'trust.wantsAllowlist': 'Конфиг проекта разрешает команды: {list}',
148
+ 'trust.exiting': 'Папка не одобрена, devx закрывается',
149
+ 'trust.mcpQuestion': 'Проект хочет запустить MCP-серверы (локальные программы, список выше). Разрешить?',
150
+ // ── view switches
151
+ 'view.expandThought': 'ctrl+p — развернуть',
152
+ 'view.expandOutput': 'ctrl+o — развернуть',
153
+ 'view.moreLines': '… ещё строк: {n}',
154
+ // ── plan approval
155
+ 'plan.cardTitle': 'План',
156
+ 'plan.files': 'Файлы',
157
+ 'plan.ready': 'План готов. Приступать к работе?',
158
+ 'plan.go': 'Go: перейти в режим AGENT и начать',
159
+ 'plan.edit': 'Поправить план (остаться в режиме PLAN)',
160
+ 'plan.editHint': 'Напишите, что поменять: план остаётся в режиме PLAN и будет переделан.',
161
+ 'plan.started': 'Режим AGENT: работаю по утверждённому плану',
162
+ // ── undo
163
+ 'undo.question': 'Вернуть файлы ({n}) к тому, какими они были до последнего хода?',
164
+ 'undo.note': 'Включая то, что сделали команды в shell. Файлы из .gitignore не затрагиваются.',
165
+ 'undo.done': 'Восстановлено файлов: {n}',
166
+ // ── permissions
167
+ 'permissions.title': 'Разрешено без вопросов',
168
+ 'permissions.none': 'Пока ничего не разрешено без вопросов: ответьте «Session» или «Always» на карточке подтверждения, чтобы добавить.',
169
+ 'permissions.hint': '/permissions clear убирает всё это (и то, что на сессию).',
170
+ 'permissions.cleared': 'Всё, что было разрешено без вопросов, убрано',
171
+ // ── cost limit
172
+ 'settings.row.costLimit': 'Лимит стоимости',
173
+ 'settings.short.costLimit': 'Лимит $',
174
+ 'settings.hint.costLimit': 'Сколько максимум может стоить одна сессия. На 80% devx предупредит, на лимите остановит задачу и спросит, прежде чем тратить дальше.',
175
+ 'cost.title': 'лимит стоимости',
176
+ 'cost.warn': 'Потрачено {spent}: 80% от лимита {limit} этой сессии',
177
+ 'cost.stopped': 'Достигнут лимит стоимости {limit}: задача остановлена',
178
+ 'cost.reached': 'Эта сессия потратила {spent} из лимита {limit}. Тратить дальше?',
179
+ 'cost.raise': 'Если продолжить, лимит этой сессии поднимется до {limit}.',
180
+ 'cost.continue': 'Да, продолжить',
181
+ 'cost.cancel': 'Нет, не сейчас',
182
+ 'cost.cancelled': 'Ничего не отправлено. Ваше сообщение вернулось в строку ввода.',
183
+ // ── /copy and /rename
184
+ 'copy.none': 'Пока нет ответа, который можно скопировать.',
185
+ 'copy.done': 'Последний ответ скопирован (символов: {n})',
186
+ 'copy.failed': 'Не удалось добраться до буфера обмена (нет wl-copy, xclip, xsel, а ответ слишком длинный для терминала).',
187
+ 'rename.done': 'Чат переименован: {name}',
188
+ 'rename.usage': 'Использование: /rename <название>. Без названия ИИ придумает его заново, когда будет первый ответ.',
189
+ 'rename.failed': 'ИИ не придумал название. Попробуйте ещё раз или задайте своё: /rename <название>.',
190
+ // ── memory
191
+ 'memory.capped': 'Память длинная: {n} самых старых фактов не отправляются модели (влезают только новые). Уберите старые из .devx/memory.md.',
192
+ 'mcp.removeUsage': 'Использование: /mcp remove <имя>',
193
+ 'mcp.removeNotFound': '«{name}» нет в ~/.devx/mcp.json. Сервер из другого файла (проект, ~/.devxrc.json) нужно убрать из того файла вручную.',
194
+ 'mcp.removed': 'Сервер «{name}» удалён',
195
+ // ── /rewind
196
+ 'rewind.title': 'вернуться назад',
197
+ 'rewind.count': 'сообщений: {n}',
198
+ 'rewind.current': '(сейчас: остаться здесь)',
199
+ 'rewind.none': 'Пока нет вашего сообщения, к которому можно вернуться.',
200
+ 'rewind.later': 'после него: {n}',
201
+ 'rewind.ago.now': 'только что',
202
+ 'rewind.ago.min': '{n} мин назад',
203
+ 'rewind.ago.hour': '{n} ч назад',
204
+ 'rewind.ago.day': '{n} дн назад',
205
+ 'rewind.filesQuestion': 'Вернуть и файлы ({n}) к тому, какими они были тогда?',
206
+ 'rewind.filesYes': 'Да, и файлы',
207
+ 'rewind.filesNo': 'Нет, только разговор',
208
+ 'rewind.done': 'Вы вернулись к своему сообщению. Всё, что было после него, стёрто, и для модели тоже. Поправьте сообщение и отправьте.',
209
+ 'rewind.doneImages': 'Вы вернулись к своему сообщению (картинки из него не сохранились, приложите их снова). Всё, что было после, стёрто, и для модели тоже.',
210
+ };
@@ -0,0 +1,210 @@
1
+ export const uk = {
2
+ 'net.unknown': 'Невідома помилка мережі',
3
+ 'net.rateLimit': 'Перевищено ліміт запитів API (429)',
4
+ 'net.badGateway': 'Шлюз провайдера тимчасово недоступний (502)',
5
+ 'net.unavailable': 'Сервер провайдера перевантажений (503)',
6
+ 'net.gatewayTimeout': 'Тайм-аут шлюзу провайдера (504)',
7
+ 'net.offline': 'Немає підключення до мережі або збій DNS (offline)',
8
+ 'net.reset': 'Обрив з’єднання із сервером',
9
+ 'net.timeout': 'Тайм-аут мережевого з’єднання',
10
+ 'net.refused': 'Сервер відхилив підключення',
11
+ 'net.fetchFailed': 'Збій мережевого запиту (з’єднання обірвано)',
12
+ 'net.generic': 'Збій інтернет-з’єднання',
13
+ 'net.failedAfter': 'Помилка мережі: не вдалося відновити з’єднання після {n} спроб ({reason}).',
14
+ 'conn.unstable': 'з’єднання нестабільне ({reason})',
15
+ 'conn.reconnecting': 'перепідключення {attempt}/{max} · повтор через {delay} с',
16
+ 'conn.restored': 'з’єднання відновлено',
17
+ 'conn.classicUnstable': 'Інтернет-з’єднання нестабільне ({reason})',
18
+ 'conn.classicRetry': 'Спроба перепідключення [{attempt}/{max}] (пауза {delay} с)...',
19
+ 'conn.classicWaiting': 'Очікування мережі [{attempt}/{max}]...',
20
+ 'conn.classicRestored': '✓ З’єднання відновлено! Продовжуємо генерацію...',
21
+ 'stop.connection': 'підключення скасовано',
22
+ 'stop.stopped': 'зупинено',
23
+ 'stop.interrupted': 'перервано, надсилаю ваше повідомлення',
24
+ 'stop.classicConnection': 'Підключення скасовано (Ctrl+C).',
25
+ 'stop.classicStopped': 'Відповідь зупинено (Ctrl+C).',
26
+ 'stop.classicInterrupted': 'Перервано: надсилаю ваше повідомлення.',
27
+ 'status.waiting': 'Очікування моделі',
28
+ 'status.thinking': 'Думає',
29
+ 'status.writing': 'Пише',
30
+ 'status.running': 'Виконується',
31
+ 'status.reconnecting': 'Перепідключення',
32
+ 'status.stop': 'ctrl+c — стоп',
33
+ 'status.thinkingLine': 'роздуми',
34
+ 'status.thoughtFor': 'думав {sec} с',
35
+ 'composer.placeholder': 'Опишіть завдання або поставте питання…',
36
+ 'composer.queued': 'у черзі',
37
+ 'composer.queuedMany': 'у черзі: {n}',
38
+ 'composer.queuedHint': 'ctrl+enter — надіслати одразу · ↓ редагувати',
39
+ 'composer.hint1': 'enter — у чергу · ctrl+c — стоп',
40
+ 'composer.hint2': 'enter — у чергу',
41
+ 'composer.hint3': 'enter — у чергу · ctrl+c — стоп',
42
+ 'composer.hint4': 'enter — у чергу',
43
+ 'summary.toolOne': 'інструментів: {n}',
44
+ 'summary.toolMany': 'інструментів: {n}',
45
+ 'summary.in': '{n} вхід',
46
+ 'summary.out': '{n} вихід',
47
+ 'summary.stopped': 'зупинено',
48
+ 'settings.title': 'налаштування',
49
+ 'settings.section.appearance': 'Вигляд',
50
+ 'settings.section.agent': 'Агент',
51
+ 'settings.section.general': 'Загальні',
52
+ 'settings.section.about': 'Про програму',
53
+ 'settings.row.theme': 'Тема',
54
+ 'settings.row.layout': 'Інтерфейс',
55
+ 'settings.row.pureBlack': 'Чорний фон',
56
+ 'settings.row.autoApprove': 'Автосхвалення (YOLO)',
57
+ 'settings.row.maxIterations': 'Макс. кроків',
58
+ 'settings.row.memory': 'Пам’ять проєкту',
59
+ 'settings.row.updates': 'Перевірка оновлень',
60
+ 'settings.row.language': 'Мова',
61
+ 'settings.row.about': 'Про devx',
62
+ 'settings.short.theme': 'Тема',
63
+ 'settings.short.layout': 'Інтерфейс',
64
+ 'settings.short.pureBlack': 'Чорний фон',
65
+ 'settings.short.autoApprove': 'YOLO',
66
+ 'settings.short.maxIterations': 'Кроків',
67
+ 'settings.short.memory': 'Пам’ять',
68
+ 'settings.short.updates': 'Оновл.',
69
+ 'settings.short.language': 'Мова',
70
+ 'settings.short.about': 'Про devx',
71
+ 'settings.value.on': 'увімк',
72
+ 'settings.value.off': 'вимк',
73
+ 'settings.value.clean': 'Чистий',
74
+ 'settings.value.classic': 'Класичний',
75
+ 'settings.value.unlimited': 'без ліміту',
76
+ 'settings.value.steps': '{n} кроків',
77
+ 'settings.hint.theme': 'Кольори всього інтерфейсу. Стрілки вліво й вправо гортають теми, панель перефарбовується одразу.',
78
+ 'settings.hint.layout': 'Чистий: рамка біля вводу, картки й спокійні рядки інструментів. Класичний: колишній ASCII-вигляд.',
79
+ 'settings.hint.pureBlack': 'Робить тло термінала глибоким чорним для OLED (#0a0a0c). Вимкнено — лишається ваше тло.',
80
+ 'settings.hint.autoApprove': 'Пропускає звичайні запити дозволів. Небезпечні команди й файли з ключами все одно питають. Діє лише в цій сесії: під час наступного запуску devx вимкнено.',
81
+ 'settings.hint.maxIterations': 'Скільки кроків з інструментами (правки файлів, команди) агент може зробити на один запит.',
82
+ 'settings.hint.memory': 'Завантажує правила з .devx/memory.md у кожну сесію.',
83
+ 'settings.hint.updates': 'Під час запуску шукає нову версію devx на GitHub. Команда /update працює в будь-якому разі.',
84
+ 'settings.hint.language': 'Мова інтерфейсу: повідомлення, налаштування й підказки. Код і назви інструментів лишаються англійськими.',
85
+ 'settings.hint.about': 'Терміналний ШІ-агент для програмування від ApvCode. Ліцензія MIT. github.com/apvcode/Termux-Dev',
86
+ 'settings.warnYolo': 'Увімкнено: агент виконує команди й правит файли без питань.',
87
+ 'settings.keys.move': 'вибір',
88
+ 'settings.keys.change': 'змінити',
89
+ 'settings.keys.toggle': 'перемкнути',
90
+ 'settings.keys.close': 'закрити',
91
+ // ── /mcp panel
92
+ 'mcp.title': 'MCP-сервери',
93
+ 'mcp.count': 'серверів: {n}',
94
+ 'mcp.scope.user': 'Ваші сервери',
95
+ 'mcp.scope.project': 'Сервери проєкту',
96
+ 'mcp.toolsCount': 'інструментів: {n}',
97
+ 'mcp.status.connected': 'підключено',
98
+ 'mcp.status.connecting': 'підключається…',
99
+ 'mcp.status.failed': 'збій',
100
+ 'mcp.status.disabled': 'вимкнено',
101
+ 'mcp.empty': 'MCP-сервери не налаштовано.',
102
+ 'mcp.emptyHint': 'Виконайте /mcp import, щоб узяти сервери Claude Code, або /mcp add <ім’я> <команда> [аргументи].',
103
+ 'mcp.detail.status': 'Стан',
104
+ 'mcp.detail.command': 'Команда',
105
+ 'mcp.detail.config': 'Конфіг',
106
+ 'mcp.detail.capabilities': 'Можливості',
107
+ 'mcp.detail.tools': 'Інструменти',
108
+ 'mcp.detail.error': 'Помилка',
109
+ 'mcp.action.tools': 'Показати інструменти',
110
+ 'mcp.action.reconnect': 'Перепідключити',
111
+ 'mcp.action.disable': 'Вимкнути',
112
+ 'mcp.action.enable': 'Увімкнути',
113
+ 'mcp.toolsTitle': 'Інструменти {name}',
114
+ 'mcp.noTools': 'Цей сервер не має інструментів.',
115
+ 'mcp.tag.readOnly': 'лише читання',
116
+ 'mcp.tag.destructive': 'руйнівний',
117
+ 'mcp.tag.openWorld': 'зовнішній світ',
118
+ 'mcp.params': 'Параметри',
119
+ 'mcp.noParams': 'Без параметрів.',
120
+ 'mcp.required': 'обов’язковий',
121
+ 'mcp.more': 'ще {n}',
122
+ 'mcp.keys.open': 'відкрити',
123
+ 'mcp.keys.back': 'назад',
124
+ 'mcp.keys.reload': 'перезавантажити всі',
125
+ 'mcp.keys.close': 'закрити',
126
+ // ── questions from the agent
127
+ 'questions.title': 'Питання',
128
+ 'questions.custom': 'Власний варіант…',
129
+ 'questions.skip': 'Пропустити',
130
+ 'questions.skipped': '(пропущено)',
131
+ 'questions.yourAnswer': 'Ваша відповідь:',
132
+ 'questions.empty': 'Відповідь не може бути порожньою',
133
+ // ── confirmations
134
+ 'confirm.yes': 'Так',
135
+ 'confirm.no': 'Ні',
136
+ 'confirm.exitTitle': 'вихід',
137
+ 'confirm.exit': 'Вийти з devx?',
138
+ 'confirm.goodbye': 'До зустрічі',
139
+ 'confirm.deleteAll': 'Видалити ВСІ збережені сесії ({n})?',
140
+ 'confirm.update': 'Оновити devx до v{version} зараз?',
141
+ 'confirm.commit': 'Закомітити зміни з таким повідомленням?',
142
+ 'trust.title': 'довіра до теки',
143
+ 'trust.question': 'Перший раз у цій теці. Довіряти їй і дозволити агенту тут працювати?',
144
+ 'trust.yes': 'Так, довіряти цій теці',
145
+ 'trust.no': 'Ні, вийти',
146
+ 'trust.wantsYolo': 'Конфіг проєкту просить автосхвалення (YOLO)',
147
+ 'trust.wantsAllowlist': 'Конфіг проєкту дозволяє команди: {list}',
148
+ 'trust.exiting': 'Теку не схвалено, devx закривається',
149
+ 'trust.mcpQuestion': 'Проєкт хоче запустити MCP-сервери (локальні програми, список вище). Дозволити?',
150
+ // ── view switches
151
+ 'view.expandThought': 'ctrl+p — розгорнути',
152
+ 'view.expandOutput': 'ctrl+o — розгорнути',
153
+ 'view.moreLines': '… ще рядків: {n}',
154
+ // ── plan approval
155
+ 'plan.cardTitle': 'План',
156
+ 'plan.files': 'Файли',
157
+ 'plan.ready': 'План готовий. Приступати до роботи?',
158
+ 'plan.go': 'Go: перейти в режим AGENT і почати',
159
+ 'plan.edit': 'Поправити план (лишитись у режимі PLAN)',
160
+ 'plan.editHint': 'Напишіть, що змінити: план лишається в режимі PLAN і буде перероблений.',
161
+ 'plan.started': 'Режим AGENT: працюю за затвердженим планом',
162
+ // ── undo
163
+ 'undo.question': 'Повернути файли ({n}) до стану перед останнім ходом?',
164
+ 'undo.note': 'Разом із тим, що зробили команди shell. Файли з .gitignore не чіпаються.',
165
+ 'undo.done': 'Відновлено файлів: {n}',
166
+ // ── permissions
167
+ 'permissions.title': 'Дозволено без питань',
168
+ 'permissions.none': 'Поки нічого не дозволено без питань: відповідайте «Session» або «Always» на картці підтвердження, щоб додати.',
169
+ 'permissions.hint': '/permissions clear прибирає все це (і те, що на сесію).',
170
+ 'permissions.cleared': 'Усе, що було дозволено без питань, прибрано',
171
+ // ── cost limit
172
+ 'settings.row.costLimit': 'Ліміт вартості',
173
+ 'settings.short.costLimit': 'Ліміт $',
174
+ 'settings.hint.costLimit': 'Скільки щонайбільше може коштувати одна сесія. На 80% devx попередить, на ліміті зупинить завдання й запитає, перш ніж витрачати далі.',
175
+ 'cost.title': 'ліміт вартості',
176
+ 'cost.warn': 'Витрачено {spent}: 80% від ліміту {limit} цієї сесії',
177
+ 'cost.stopped': 'Досягнуто ліміт вартості {limit}: завдання зупинено',
178
+ 'cost.reached': 'Ця сесія витратила {spent} з ліміту {limit}. Витрачати далі?',
179
+ 'cost.raise': 'Якщо продовжити, ліміт цієї сесії підніметься до {limit}.',
180
+ 'cost.continue': 'Так, продовжити',
181
+ 'cost.cancel': 'Ні, не зараз',
182
+ 'cost.cancelled': 'Нічого не надіслано. Ваше повідомлення повернулося в рядок вводу.',
183
+ // ── /copy and /rename
184
+ 'copy.none': 'Поки немає відповіді, яку можна скопіювати.',
185
+ 'copy.done': 'Останню відповідь скопійовано (символів: {n})',
186
+ 'copy.failed': 'Не вдалося дістатися до буфера обміну (немає wl-copy, xclip, xsel, а відповідь задовга для термінала).',
187
+ 'rename.done': 'Чат перейменовано: {name}',
188
+ 'rename.usage': 'Використання: /rename <назва>. Без назви ШІ вигадає її знову, коли буде перша відповідь.',
189
+ 'rename.failed': 'ШІ не вигадав назву. Спробуйте ще раз або задайте свою: /rename <назва>.',
190
+ // ── memory
191
+ 'memory.capped': 'Пам’ять довга: {n} найстаріших фактів не надсилаються моделі (вміщуються лише нові). Приберіть старі з .devx/memory.md.',
192
+ 'mcp.removeUsage': 'Використання: /mcp remove <ім’я>',
193
+ 'mcp.removeNotFound': '«{name}» немає в ~/.devx/mcp.json. Сервер з іншого файлу (проєкт, ~/.devxrc.json) треба прибрати з того файлу вручну.',
194
+ 'mcp.removed': 'Сервер «{name}» видалено',
195
+ // ── /rewind
196
+ 'rewind.title': 'повернутися назад',
197
+ 'rewind.count': 'повідомлень: {n}',
198
+ 'rewind.current': '(зараз: лишитись тут)',
199
+ 'rewind.none': 'Поки немає вашого повідомлення, до якого можна повернутися.',
200
+ 'rewind.later': 'після нього: {n}',
201
+ 'rewind.ago.now': 'щойно',
202
+ 'rewind.ago.min': '{n} хв тому',
203
+ 'rewind.ago.hour': '{n} год тому',
204
+ 'rewind.ago.day': '{n} дн тому',
205
+ 'rewind.filesQuestion': 'Повернути й файли ({n}) до того, якими вони були тоді?',
206
+ 'rewind.filesYes': 'Так, і файли',
207
+ 'rewind.filesNo': 'Ні, лише розмову',
208
+ 'rewind.done': 'Ви повернулися до свого повідомлення. Усе, що було після нього, стерто, і для моделі теж. Поправте повідомлення й надішліть.',
209
+ 'rewind.doneImages': 'Ви повернулися до свого повідомлення (картинки з нього не збереглися, додайте їх знову). Усе, що було після, стерто, і для моделі теж.',
210
+ };