@deadragdoll/tellymcp 0.0.9 → 0.0.11

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 (157) hide show
  1. package/.env.example.client +42 -50
  2. package/.env.example.gateway +49 -61
  3. package/CHANGELOG.md +3 -3
  4. package/README-ru.md +205 -384
  5. package/README.md +195 -1194
  6. package/TOOLS.md +294 -377
  7. package/VERSION.md +36 -10
  8. package/config/codex/plugins/telly-workflows/.codex-plugin/plugin.json +18 -0
  9. package/config/codex/plugins/telly-workflows/references/invariants.md +10 -0
  10. package/config/codex/plugins/telly-workflows/skills/telly-browser-screenshot/SKILL.md +27 -0
  11. package/config/codex/plugins/telly-workflows/skills/telly-collab-artifact/SKILL.md +22 -0
  12. package/config/codex/plugins/telly-workflows/skills/telly-human-telegram/SKILL.md +31 -0
  13. package/config/codex/plugins/telly-workflows/skills/telly-partner-note/SKILL.md +36 -0
  14. package/config/templates/env.both.template +40 -20
  15. package/config/templates/env.client.template +34 -18
  16. package/config/templates/env.gateway.template +38 -22
  17. package/dist/cli.js +322 -75
  18. package/dist/codexPluginInstaller.js +215 -0
  19. package/dist/lib/mixins/session.errors.js +34 -1
  20. package/dist/lib/pinoTargets.js +2 -2
  21. package/dist/moleculer.config.js +7 -5
  22. package/dist/services/features/telegram-mcp/approval.service.js +1 -1
  23. package/dist/services/features/telegram-mcp/browser.service.js +95 -2
  24. package/dist/services/features/telegram-mcp/collaboration.service.js +41 -4
  25. package/dist/services/features/telegram-mcp/ensuredb.service.js +145 -26
  26. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +285 -103
  27. package/dist/services/features/telegram-mcp/gateway-rmq.service.js +3 -2
  28. package/dist/services/features/telegram-mcp/gateway-socket.service.js +905 -87
  29. package/dist/services/features/telegram-mcp/gateway.service.js +876 -81
  30. package/dist/services/features/telegram-mcp/mcp-http.service.js +9 -1
  31. package/dist/services/features/telegram-mcp/mcp-server.service.js +17 -26
  32. package/dist/services/features/telegram-mcp/notify.service.js +128 -2
  33. package/dist/services/features/telegram-mcp/runtime.service.js +27 -7
  34. package/dist/services/features/telegram-mcp/session-context.service.js +29 -2
  35. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +133 -10
  36. package/dist/services/features/telegram-mcp/src/app/config/env.js +161 -51
  37. package/dist/services/features/telegram-mcp/src/app/http.js +375 -42
  38. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +386 -58
  39. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +3 -0
  40. package/dist/services/features/telegram-mcp/src/app/webapp/terminal.js +12 -0
  41. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +116 -104
  42. package/dist/services/features/telegram-mcp/src/entities/xchange/model/types.js +2 -0
  43. package/dist/services/features/telegram-mcp/src/features/ask-user/model/askUserTelegram.js +1 -1
  44. package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +1 -1
  45. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +249 -19
  46. package/dist/services/features/telegram-mcp/src/features/collaboration/model/gatewaySessionsService.js +71 -0
  47. package/dist/services/features/telegram-mcp/src/features/collaboration/model/listGatewaySessionsTool.js +33 -0
  48. package/dist/services/features/telegram-mcp/src/features/collaboration/model/localCollaborationBackend.js +93 -82
  49. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +47 -5
  50. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileTool.js +1 -1
  51. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerNoteTool.js +1 -1
  52. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +82 -0
  53. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +22 -14
  54. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +649 -75
  55. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/remoteConsoleActionClient.js +76 -0
  56. package/dist/services/features/telegram-mcp/src/features/embedded-runtime/model/embeddedRuntimeBroker.js +92 -0
  57. package/dist/services/features/telegram-mcp/src/features/foreground-terminal/model/foregroundTerminalRuntime.js +192 -0
  58. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +382 -3
  59. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyTelegramTool.js +1 -1
  60. package/dist/services/features/telegram-mcp/src/features/notify/model/sendFileToTelegramTool.js +33 -0
  61. package/dist/services/features/telegram-mcp/src/features/session-context/model/clearSessionContextTool.js +1 -1
  62. package/dist/services/features/telegram-mcp/src/features/session-context/model/getSessionContextTool.js +1 -1
  63. package/dist/services/features/telegram-mcp/src/features/session-context/model/renameSessionTool.js +1 -1
  64. package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +42 -200
  65. package/dist/services/features/telegram-mcp/src/features/session-context/model/setSessionContextTool.js +1 -1
  66. package/dist/services/features/telegram-mcp/src/features/terminal-buffer/model/terminalBufferService.js +96 -0
  67. package/dist/services/features/telegram-mcp/src/features/terminal-input/model/terminalInputService.js +97 -0
  68. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownService.js +107 -58
  69. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownTool.js +1 -1
  70. package/dist/services/features/telegram-mcp/src/features/xchange/model/getXchangeRecordTool.js +28 -0
  71. package/dist/services/features/telegram-mcp/src/features/xchange/model/listXchangeRecordsTool.js +28 -0
  72. package/dist/services/features/telegram-mcp/src/features/xchange/model/markXchangeRecordReadTool.js +28 -0
  73. package/dist/services/features/telegram-mcp/src/features/xchange/model/xchangeService.js +169 -0
  74. package/dist/services/features/telegram-mcp/src/processes/human-approval/model/orchestrator.js +5 -4
  75. package/dist/services/features/telegram-mcp/src/shared/i18n/index.js +46 -0
  76. package/dist/services/features/telegram-mcp/src/shared/i18n/resources/en.js +652 -0
  77. package/dist/services/features/telegram-mcp/src/shared/i18n/resources/ru.js +652 -0
  78. package/dist/services/features/telegram-mcp/src/shared/integrations/memory/processLocalSessionStore.js +27 -0
  79. package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +11 -8
  80. package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +51 -71
  81. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/proxyFetch.js +21 -22
  82. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +411 -6524
  83. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportAttachmentStore.js +93 -0
  84. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportBroadcastActions.js +385 -0
  85. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConsoleRegistry.js +143 -0
  86. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConstructorWiring.js +633 -0
  87. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContent.js +84 -0
  88. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContext.js +78 -0
  89. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportDocumentActions.js +36 -0
  90. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportEventActions.js +292 -0
  91. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +352 -0
  92. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFormatting.js +75 -0
  93. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportGatewayActions.js +44 -0
  94. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLifecycleActions.js +161 -0
  95. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLive.js +56 -0
  96. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLiveActions.js +77 -0
  97. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuCallbacks.js +254 -0
  98. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFactories.js +538 -0
  99. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFingerprints.js +93 -0
  100. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFlow.js +344 -0
  101. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuShell.js +62 -0
  102. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuState.js +408 -0
  103. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuText.js +216 -0
  104. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMessageFlow.js +452 -0
  105. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportOutputActions.js +189 -0
  106. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPartnerActions.js +286 -0
  107. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPayloadState.js +101 -0
  108. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectActions.js +463 -0
  109. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEntryActions.js +202 -0
  110. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEvents.js +99 -0
  111. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectMenus.js +138 -0
  112. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectState.js +308 -0
  113. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectView.js +426 -0
  114. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportRequestFlow.js +278 -0
  115. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportSessionActions.js +143 -0
  116. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalActions.js +468 -0
  117. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalRuntime.js +171 -0
  118. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTypes.js +2 -0
  119. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportUtils.js +330 -0
  120. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportXchangeState.js +107 -0
  121. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +255 -0
  122. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +543 -0
  123. package/dist/services/features/telegram-mcp/src/shared/integrations/xchange/sqliteRecordStore.js +223 -0
  124. package/dist/services/features/telegram-mcp/src/shared/lib/gatewayScope.js +24 -0
  125. package/dist/services/features/telegram-mcp/src/shared/lib/logger/logger.js +6 -0
  126. package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +147 -76
  127. package/dist/services/features/telegram-mcp/src/shared/lib/telegramXchangeRecords.js +72 -0
  128. package/dist/services/features/telegram-mcp/src/shared/lib/terminalPromptDetection.js +237 -0
  129. package/dist/services/features/telegram-mcp/src/shared/lib/version/versionHandshake.js +129 -1
  130. package/dist/services/features/telegram-mcp/src/shared/lib/xchangeRecordHints.js +98 -0
  131. package/dist/services/features/telegram-mcp/standalone-http.service.js +13 -1
  132. package/dist/services/features/telegram-mcp/terminal-buffer.service.js +42 -0
  133. package/dist/services/features/telegram-mcp/terminal-input.service.js +41 -0
  134. package/dist/services/features/telegram-mcp/tools-sync.service.js +16 -2
  135. package/dist/services/features/telegram-mcp/xchange.service.js +123 -0
  136. package/docs/STANDALONE-ru.md +172 -0
  137. package/docs/STANDALONE.md +172 -0
  138. package/package.json +11 -5
  139. package/scripts/build-package-artifact.sh +27 -0
  140. package/scripts/deploy-gateway.sh +64 -0
  141. package/scripts/deploy-onebot-branch.sh +27 -0
  142. package/scripts/postinstall.js +11 -36
  143. package/STANDALONE-ru.md +0 -274
  144. package/STANDALONE.md +0 -274
  145. package/dist/services/features/telegram-mcp/inbox.service.js +0 -33
  146. package/dist/services/features/telegram-mcp/pair.service.js +0 -33
  147. package/dist/services/features/telegram-mcp/src/app/webapp/tmux.js +0 -10
  148. package/dist/services/features/telegram-mcp/src/features/inbox/model/deleteTelegramInboxMessageTool.js +0 -33
  149. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxCountTool.js +0 -33
  150. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxTool.js +0 -33
  151. package/dist/services/features/telegram-mcp/src/features/inbox/model/inboxService.js +0 -77
  152. package/dist/services/features/telegram-mcp/src/features/pair-session/model/clearSessionPairingTool.js +0 -33
  153. package/dist/services/features/telegram-mcp/src/features/pair-session/model/createSessionPairCodeTool.js +0 -33
  154. package/dist/services/features/telegram-mcp/src/features/pair-session/model/generatePairCode.js +0 -202
  155. package/dist/services/features/telegram-mcp/src/features/session-context/model/getTmuxTargetTool.js +0 -33
  156. package/dist/services/features/telegram-mcp/src/features/session-context/model/setTmuxTargetTool.js +0 -33
  157. package/dist/services/features/telegram-mcp/src/shared/integrations/tmux/client.js +0 -363
@@ -0,0 +1,652 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ruMenu = exports.ruCommon = void 0;
4
+ exports.ruCommon = {
5
+ errors: {
6
+ no_telegram_identity: "Для этого чата недоступна Telegram-идентичность.",
7
+ no_active_session: "Активная сессия ещё не привязана. Привяжи её через /start <code>.",
8
+ missing_telegram_context: "Не удалось определить Telegram-пользователя или чат.",
9
+ },
10
+ menu: {
11
+ refreshed: "Меню обновлено.",
12
+ gateway_unavailable: "Gateway недоступен",
13
+ no_telegram_identity_label: "Нет Telegram identity",
14
+ no_active_session_label: "Нет активной сессии",
15
+ back: "⬅ Назад",
16
+ refresh: "🔄 Обновить",
17
+ close: "✖ Закрыть",
18
+ delete: "🗑 Удалить",
19
+ get: "📥 Получить",
20
+ },
21
+ };
22
+ exports.ruMenu = {
23
+ main: {
24
+ buttons: {
25
+ live: "🖥 Live",
26
+ content: "📄 Content",
27
+ browser: "🌐 Browser",
28
+ local: "🏠 Local",
29
+ collab: "👥 Collab",
30
+ storage: "📦 Storage",
31
+ settings: "⚙ Settings",
32
+ back: "⬅ Назад",
33
+ },
34
+ actions: {
35
+ open_content: "Открываю меню content.",
36
+ open_browser: "Открываю browser.",
37
+ open_inbox: "Открываю inbox.",
38
+ open_storage: "Открываю storage.",
39
+ open_settings: "Открываю настройки.",
40
+ back_to_sessions: "Назад к сессиям.",
41
+ },
42
+ screen: {
43
+ title: "🎛 Сессия: {{sessionName}}",
44
+ inbox_messages: "📥 Сообщений в inbox: {{count}}",
45
+ project: "📦 Проект: <b>{{projectName}}</b>",
46
+ partner: "🤝 Напарник: <b><i>{{partnerName}}</i></b>",
47
+ partner_hint: "Делись с напарником деталями API, изменениями, ошибками и git-контекстом.",
48
+ link_hint: "🔗 Свяжи напарника, чтобы координироваться через общие заметки и файлы.",
49
+ terminal_mode_direct: "🖧 Режим терминала: direct",
50
+ },
51
+ },
52
+ sessions: {
53
+ screen: {
54
+ title: "🗂 Выбери активную сессию",
55
+ last_worked: "🕘 Последняя работа: <i>{{sessionName}}</i>",
56
+ updated: "⏱ Обновлено: <i>{{timestamp}}</i>",
57
+ current_active: "📌 Текущая активная: <b>{{sessionName}}</b>",
58
+ no_linked_sessions: "Для этой Telegram identity не найдено видимых сессий.",
59
+ },
60
+ labels: {
61
+ no_linked_sessions: "🫥 Нет видимых сессий",
62
+ unavailable: "⚠ Сессии недоступны",
63
+ tools: "🛠 Tools",
64
+ },
65
+ actions: {
66
+ no_linked_sessions: "Для этой Telegram identity не найдено видимых сессий.",
67
+ unavailable: "Меню сессий временно недоступно.",
68
+ refreshed: "Список сессий обновлён.",
69
+ open_tools: "Открываю инструменты.",
70
+ },
71
+ },
72
+ inbox: {
73
+ button: "📥 Inbox",
74
+ button_count: "📥 Inbox ({{count}})",
75
+ screen: {
76
+ title: "📥 Inbox",
77
+ active_session: "📌 Активная сессия: {{sessionName}}",
78
+ stored_messages: "📨 Сохранённых сообщений: {{count}}",
79
+ choose_message: "Выбери сообщение ниже, чтобы просмотреть или удалить его.",
80
+ empty: "Для этой сессии нет сохранённых внеочередных Telegram-сообщений.",
81
+ },
82
+ labels: {
83
+ empty: "📭 Inbox пуст",
84
+ },
85
+ actions: {
86
+ empty: "Нет сохранённых внеочередных Telegram-сообщений.",
87
+ refreshed: "Inbox обновлён.",
88
+ },
89
+ },
90
+ buffer: {
91
+ buttons: {
92
+ visible: "👁 Видимое",
93
+ full: "🧾 Полное",
94
+ last_300: "📄 Последние 300",
95
+ last_1000: "📄 Последние 1000",
96
+ },
97
+ screen: {
98
+ title: "📄 Content",
99
+ active_session: "📌 Активная сессия: {{sessionName}}",
100
+ terminal_target: "🖥 terminal target: {{terminalTarget}}",
101
+ export_hint: "Выбери, сколько истории pane экспортировать в Markdown-файл.",
102
+ export_modes: "Visible отдаёт текущий viewport терминала. Full экспортирует всю доступную историю терминала.",
103
+ },
104
+ },
105
+ browser: {
106
+ buttons: {
107
+ screenshots: "📸 Скриншоты",
108
+ screenshots_count: "📸 Скриншоты ({{count}})",
109
+ },
110
+ actions: {
111
+ open_screenshots: "Открываю скриншоты.",
112
+ back_to_session_menu: "Назад к меню сессии.",
113
+ refreshed: "Скриншоты обновлены.",
114
+ back_to_browser_menu: "Назад к browser.",
115
+ },
116
+ screen: {
117
+ title: "🌐 Browser",
118
+ active_session: "📌 Активная сессия: {{sessionName}}",
119
+ stored_screenshots: "📸 Сохранённых скриншотов: {{count}}",
120
+ choose_action: "Выбери действие, связанное с browser, ниже.",
121
+ },
122
+ },
123
+ screenshots: {
124
+ screen: {
125
+ title: "📸 Скриншоты",
126
+ active_session: "📌 Активная сессия: {{sessionName}}",
127
+ stored_screenshots: "📦 Сохранённых скриншотов: {{count}}",
128
+ choose_screenshot: "Выбери скриншот ниже, чтобы получить его в Telegram или удалить.",
129
+ empty: "Для этой сессии нет сохранённых browser-скриншотов.",
130
+ },
131
+ labels: {
132
+ empty: "📭 Нет скриншотов",
133
+ },
134
+ actions: {
135
+ empty: "Для этой сессии нет сохранённых скриншотов.",
136
+ refreshed: "Скриншоты обновлены.",
137
+ back_to_screenshots: "Назад к скриншотам.",
138
+ },
139
+ },
140
+ storage: {
141
+ buttons: {
142
+ get: "📥 Получить",
143
+ delete: "🗑 Удалить",
144
+ },
145
+ actions: {
146
+ back_to_storage: "Назад к storage.",
147
+ refreshed: "Storage обновлён.",
148
+ empty: "В .mcp-xchange для этой сессии пока нет файлов.",
149
+ },
150
+ screen: {
151
+ title: "📦 Storage",
152
+ active_session: "📌 Активная сессия: {{sessionName}}",
153
+ stored_files: "📦 Сохранённых файлов: {{count}}",
154
+ choose_file: "Выбери файл ниже, чтобы просмотреть его или отправить в Telegram.",
155
+ empty: "Для этой сессии нет сохранённых .mcp-xchange файлов.",
156
+ },
157
+ labels: {
158
+ empty: "📭 Storage пуст",
159
+ },
160
+ },
161
+ settings: {
162
+ buttons: {
163
+ info: "ℹ Info",
164
+ rename: "✏ Rename",
165
+ unpair: "🗑 Unpair",
166
+ confirm_unpair: "⚠ Подтвердить удаление маршрута",
167
+ },
168
+ actions: {
169
+ confirm_unpair: "Подтверди удаление маршрута.",
170
+ back_to_settings: "Назад к настройкам.",
171
+ rename_prompt: "Отправь новое название сессии.",
172
+ rename_body: "Отправь следующим текстовым сообщением новое название активной сессии.\nКоманды вроде /menu или /help отменят режим переименования.",
173
+ },
174
+ screen: {
175
+ title: "⚙ Settings",
176
+ active_session: "📌 Активная сессия: {{sessionName}}",
177
+ hint: "Открой информацию о сессии, переименуй её или отвяжи от Telegram.",
178
+ },
179
+ },
180
+ local: {
181
+ buttons: {
182
+ partner: "🤝 Напарник",
183
+ link: "🔗 Связать",
184
+ unlink: "🔓 Разорвать",
185
+ },
186
+ actions: {
187
+ open_local: "Открываю локальное взаимодействие.",
188
+ back_to_session_menu: "Назад к меню сессии.",
189
+ },
190
+ screen: {
191
+ title: "🏠 Local",
192
+ active_session: "📌 Активная сессия: {{sessionName}}",
193
+ link_status: "🤝 Связь: {{linkedSessionName}}",
194
+ link_status_none: "🤝 Связь: не настроена",
195
+ hint_title: "Здесь живёт локальная работа в одном боте:",
196
+ hint_body: "связка сессий, обмен note и файлами без gateway.",
197
+ unavailable: "Локальное взаимодействие недоступно для этого чата.",
198
+ no_active_session: "Активная сессия не выбрана. Сначала привяжи её через /start.",
199
+ },
200
+ },
201
+ link: {
202
+ buttons: {
203
+ link: "🔗 Связать",
204
+ unlink_with_name: "🔓 Разорвать {{sessionName}}",
205
+ unlink: "🔓 Разорвать",
206
+ },
207
+ labels: {
208
+ no_partner_sessions: "🫥 Нет сессий напарника",
209
+ },
210
+ actions: {
211
+ no_partner_sessions: "Нет других привязанных сессий.",
212
+ back_to_session_menu: "Назад к меню сессии.",
213
+ unlinked: "Связь с напарником снята.",
214
+ choose_partner: "Выбери сессию напарника.",
215
+ },
216
+ screen: {
217
+ title: "🔗 Связать напарника",
218
+ active_session: "📌 Активная сессия: {{sessionName}}",
219
+ choose_partner: "Выбери другую сессию, чтобы связать её как напарника.",
220
+ hint: "Используй эту связку, чтобы делиться API summary, изменениями, ошибками и важным git-контекстом через .mcp-xchange заметки и файлы.",
221
+ },
222
+ },
223
+ partner: {
224
+ buttons: {
225
+ ask: "❓ Ask",
226
+ share: "📤 Share",
227
+ unlink: "🔓 Unlink",
228
+ },
229
+ actions: {
230
+ back_to_session_menu: "Назад к меню сессии.",
231
+ open_partner_menu: "Открываю меню напарника.",
232
+ back_to_partner: "Назад к напарнику.",
233
+ cancel_note_input: "Отправка note напарнику отменена.",
234
+ no_pending_note_input: "Нет активного ввода для note напарнику.",
235
+ task_sent: "Задача отправлена выбранной сессии.",
236
+ inbox_queued: "Задача поставлена в inbox текущей сессии.",
237
+ },
238
+ screen: {
239
+ title: "🤝 Напарник",
240
+ active_session: "📌 Активная сессия: {{sessionName}}",
241
+ linked_partner: "👥 Связанный напарник: {{partnerName}}",
242
+ no_partner: "Напарник пока не связан.",
243
+ use_link_first: "Сначала используй Link в меню сессии.",
244
+ prompt_hint: "Задай вопрос по API или поделись изменениями.",
245
+ prompt_format: "Формат prompt: первая строка — summary. При необходимости добавь пустую строку и основной текст ниже.",
246
+ default_partner: "напарник",
247
+ executor: "Исполнитель: {{label}}",
248
+ route_result: "Маршрут результата: {{source}} -> {{target}}",
249
+ route_send: "Маршрут отправки: {{source}} -> {{target}}",
250
+ type: "Тип: {{kind}}",
251
+ summary: "Кратко: {{summary}}",
252
+ status: "Статус: {{status}}",
253
+ delivered: "доставлено",
254
+ queued: "в очереди",
255
+ current_session_handles: "Текущая сессия подготовит результат и отправит его сама.",
256
+ },
257
+ },
258
+ collab: {
259
+ buttons: {
260
+ tools: "🛠 Tools",
261
+ create: "➕ Создать",
262
+ join: "🔑 Войти",
263
+ broadcast: "📣 Broadcast",
264
+ history: "🕘 History",
265
+ delete: "🗑 Delete",
266
+ },
267
+ actions: {
268
+ gateway_only: "Проекты доступны только через gateway.",
269
+ open_tools: "Открываю инструменты проекта.",
270
+ open_collab: "Открываю Collab.",
271
+ open_delete: "Открываю удаление проектов.",
272
+ back_to_collab: "Назад к Collab.",
273
+ back_to_tools: "Назад к инструментам.",
274
+ back_to_session_menu: "Назад к меню сессии.",
275
+ no_projects: "Проектов пока нет. Создай или войди в существующий.",
276
+ },
277
+ labels: {
278
+ no_projects: "🫥 Нет проектов",
279
+ },
280
+ screen: {
281
+ title: "👥 Collab",
282
+ gateway_not_configured: "Gateway не настроен для этого запуска.",
283
+ use_local_instead: "Для локальной работы в одном боте используй раздел Local.",
284
+ unavailable: "Collab недоступен для текущей сессии.",
285
+ active_session: "📌 Активная сессия: {{sessionName}}",
286
+ open_project: "📦 Открытый проект: {{projectName}}",
287
+ open_project_none: "📦 Открытый проект: не выбран",
288
+ project_count: "🗂 Доступно проектов: {{count}}",
289
+ invite_hint: "Открой проект, создай новый или войди по invite-коду.",
290
+ tools_title: "🛠 Collab Tools",
291
+ tools_empty: "Сначала создай проект или войди в существующий.",
292
+ tools_project_count: "🗂 Проектов в Collab: {{count}}",
293
+ tools_session_count: "👥 Уникальных сессий: {{count}}",
294
+ tools_broadcast: "Broadcast отправит следующее текстовое сообщение всем уникальным Collab-сессиям на ботах без дублирования.",
295
+ tools_history: "History отправит .md с последними 5 Collab-событиями текущей сессии.",
296
+ },
297
+ },
298
+ help: {
299
+ title: "❓ Справка TellyMCP",
300
+ menu: "/menu - открыть список сессий",
301
+ help: "/help - показать эту справку",
302
+ how_it_works: "Как это работает:",
303
+ step_choose: "- выбери активную сессию",
304
+ step_inbox: "- обычные Telegram-сообщения попадают в inbox этой сессии",
305
+ step_nudge: "- если настроен terminal target, сервис автоматически будит агента",
306
+ step_tools: "- затем агент читает batch inbox через MCP tools",
307
+ },
308
+ live: {
309
+ buttons: {
310
+ fullscreen: "Fullscreen",
311
+ expand: "Expand",
312
+ default: "Default",
313
+ },
314
+ actions: {
315
+ opening: "Открываю Live View.",
316
+ choose_mode: "Выбери режим открытия:",
317
+ opened_info: "Live view открыт.",
318
+ approval_unavailable: "Эта сессия сейчас недоступна для подтверждения.",
319
+ },
320
+ errors: {
321
+ identity_unavailable: "Telegram identity недоступна.",
322
+ no_active_session: "Активная сессия не выбрана.",
323
+ webapp_disabled: "WebApp не включён на сервере.",
324
+ public_url_missing: "Публичный URL WebApp не настроен.",
325
+ },
326
+ screen: {
327
+ launcher_title: "🖥 Live: {{sessionName}}",
328
+ },
329
+ approval: {
330
+ request_title: "🖥 Запрос Live view",
331
+ request_message: "Сессия {{sourceSessionName}} запрашивает доступ к Live view вашей сессии.",
332
+ route: "Сессия: {{sourceSessionName}} -> {{targetSessionName}}",
333
+ project: "Проект: {{projectName}}",
334
+ approve: "Разрешить",
335
+ deny: "Отклонить",
336
+ approved: "✅ Доступ к Live разрешён.",
337
+ denied: "❌ Доступ к Live отклонён.",
338
+ source_open: "Открыть Live",
339
+ result_approved: "Live view разрешён для {{sourceSessionName}} -> {{targetSessionName}}.",
340
+ result_denied: "Live view отклонён для {{sourceSessionName}} -> {{targetSessionName}}.",
341
+ },
342
+ },
343
+ notices: {
344
+ admin: {
345
+ gateway_client_registered_title: "🆕 Зарегистрирован новый gateway client",
346
+ gateway_session_registered_title: "🆕 Зарегистрирована новая gateway session",
347
+ gateway_client_uuid: "Client UUID: {{value}}",
348
+ gateway_node_id: "Node: {{value}}",
349
+ gateway_package_version: "Package: {{value}}",
350
+ gateway_session_count: "Сессий в hello: {{count}}",
351
+ gateway_new_sessions: "Новые сессии:",
352
+ gateway_session_item: "• {{label}} ({{localSessionId}})",
353
+ },
354
+ startup: {
355
+ title: "✅ TellyMCP запущен.",
356
+ version: "Версия: {{packageVersion}}",
357
+ protocol: "Протокол: {{protocolVersion}}",
358
+ mode: "Режим: {{mode}}",
359
+ bot: "Бот: @{{botUsername}}",
360
+ sessions: "Привязанных сессий: {{count}}",
361
+ session_list: "Сессии: {{sessions}}",
362
+ mcp: "MCP: {{url}}",
363
+ webapp: "WebApp: {{url}}",
364
+ gateway: "Gateway: {{url}}",
365
+ gateway_ws: "Gateway WS: {{url}}",
366
+ browser: "Browser: {{status}}",
367
+ update_available: "Доступно обновление: {{currentVersion}} -> {{latestVersion}}",
368
+ update_command: "Команда обновления: npm install -g {{packageName}}@{{latestVersion}}",
369
+ hint: "Напиши /menu, чтобы открыть меню сессий.",
370
+ },
371
+ project: {
372
+ member_joined: "В проект «{{projectName}}» вошёл участник: {{memberLabel}}.",
373
+ member_left: "Из проекта «{{projectName}}» вышел участник: {{memberLabel}}.",
374
+ deleted: "Проект «{{projectName}}» удалён. Локальные project bindings очищены.",
375
+ new_member: "Новый участник",
376
+ member: "Участник",
377
+ },
378
+ tools: {
379
+ changed: "TOOLS.md обновлён на шлюзе или хэш текущей сессии ещё неизвестен.",
380
+ session: "Сессия: {{sessionName}}",
381
+ action_required: "Действие обязательно: вызови refresh_tools_markdown с текущим known hash. Если changed=true, прочитай и примени возвращённый content перед продолжением работы.",
382
+ },
383
+ version: {
384
+ reject: "Шлюз и клиент несовместимы по протоколу. Транспорт этой сессии заблокирован.",
385
+ warn: "Версии шлюза и клиента различаются.",
386
+ session: "Сессия: {{sessionName}}",
387
+ client: "Клиент: {{packageVersion}} / protocol {{protocolVersion}}",
388
+ gateway: "Шлюз: {{packageVersion}} / protocol {{protocolVersion}}",
389
+ },
390
+ terminal: {
391
+ target_invalid_title: "⚠ Автоматический nudge терминала для сессии {{sessionName}} не сработал.",
392
+ target_invalid_target: "Сохранённый terminal target больше недействителен: {{terminalTarget}}",
393
+ target_invalid_action: "Перепривяжи terminal target для этой сессии.",
394
+ unavailable_title: "⚠ Автоматический nudge терминала для сессии {{sessionName}} пропущен.",
395
+ unavailable_body: "Терминальный runtime сейчас недоступен на этой машине.",
396
+ unavailable_target: "terminal target: {{terminalTarget}}",
397
+ unavailable_reason: "Обычно это значит, что терминальный runtime не запущен или недоступен для текущего target.",
398
+ unavailable_action: "Перезапусти терминальный runtime для этой консоли или обнови/сними terminal target для этой сессии.",
399
+ prompt_detected_title: "🛎 Похоже, агент в сессии {{sessionName}} ждёт твой ввод.",
400
+ prompt_detected_score: "Сила срабатывания: {{score}}",
401
+ prompt_detected_target: "terminal target: {{terminalTarget}}",
402
+ prompt_detected_hint: "Открой Live или ответь в терминале, если этот prompt действительно требует тебя.",
403
+ prompt_detected_excerpt: "Последние строки prompt:",
404
+ },
405
+ },
406
+ admin: {
407
+ auth: {
408
+ prompt: "Доступ к gateway-боту закрыт. Отправь /auth <token>, чтобы продолжить.",
409
+ help: "Этот gateway-бот требует предварительную admin-аутентификацию. Отправь /auth <token>.",
410
+ required_callback: "Сначала авторизуйся через /auth <token>.",
411
+ invalid: "Admin token неверный.",
412
+ success: "Admin-аутентификация шлюза принята. Теперь можно пользоваться командами и меню.",
413
+ disabled: "Admin-аутентификация шлюза не включена.",
414
+ },
415
+ buttons: {
416
+ clients: "Clients",
417
+ tools: "Tools",
418
+ client_env: "Client .env",
419
+ },
420
+ actions: {
421
+ open_clients: "Открываю список клиентов.",
422
+ open_client_sessions: "Открываю сессии клиента.",
423
+ open_client_session: "Открываю сессию.",
424
+ open_tools: "Открываю инструменты.",
425
+ back_to_admin: "Назад в admin.",
426
+ back_to_clients: "Назад к клиентам.",
427
+ back_to_client_sessions: "Назад к сессиям клиента.",
428
+ },
429
+ screen: {
430
+ title: "🛡 Gateway Admin",
431
+ help: "Используй admin-меню, чтобы смотреть клиентов шлюза и экспортировать клиентский .env.",
432
+ gateway_clients: "Известных клиентов: {{count}}",
433
+ gateway_clients_connected: "Подключены по gateway WS: {{count}}",
434
+ gateway_clients_registered: "Зарегистрированы active sessions: {{count}}",
435
+ gateway_clients_unavailable: "Список клиентов шлюза сейчас недоступен.",
436
+ hint: "Выбери нужный раздел ниже.",
437
+ },
438
+ clients: {
439
+ title: "🖥 Клиенты шлюза",
440
+ empty: "Шлюз пока не знает ни одного клиента.",
441
+ unavailable: "Список клиентов шлюза сейчас недоступен.",
442
+ connected_count: "Подключены по gateway WS: {{count}}",
443
+ registered_count: "Зарегистрированы active sessions: {{count}}",
444
+ legend: "Легенда: 🟢 сейчас подключён, 🗂 есть зарегистрированные active sessions.",
445
+ item: "• {{label}}",
446
+ bot: " Бот: {{botUsername}}",
447
+ sessions: " Сессий: {{count}}",
448
+ last_seen: " Последняя активность: {{value}}",
449
+ },
450
+ client_sessions: {
451
+ buttons: {
452
+ collab: "👥 Collab",
453
+ all: "🗂 All",
454
+ },
455
+ title: "🧩 Сессии клиента",
456
+ client: "Клиент: <b>{{client}}</b>",
457
+ total: "Сессий: {{count}}",
458
+ choose: "Выбери сессию ниже.",
459
+ choose_scope: "Выбери, какой набор сессий смотреть.",
460
+ scope_collab: "Срез: Collab",
461
+ scope_all: "Срез: все известные сессии",
462
+ empty: "У этого клиента нет активных сессий.",
463
+ empty_all: "У этого клиента сейчас нет известных сессий.",
464
+ unavailable: "Список сессий клиента сейчас недоступен.",
465
+ updated: " Обновлено: {{timestamp}}",
466
+ project: " Проект: <b>{{projectName}}</b>",
467
+ no_client_selected: "Сначала выбери клиента.",
468
+ invalid_action: "Некорректное действие с клиентом.",
469
+ not_found: "Выбранный клиент больше недоступен.",
470
+ back_to_scope: "⬅ Назад к видам",
471
+ },
472
+ client_session_detail: {
473
+ title: "🖥 Сессия клиента",
474
+ session: "Сессия: <b>{{sessionName}}</b>",
475
+ project: "Проект: <b>{{projectName}}</b>",
476
+ bind: "🔗 Привязать сюда",
477
+ bound: "Сессия привязана: {{sessionName}}",
478
+ back_to_sessions: "⬅ Назад к сессиям",
479
+ },
480
+ tools: {
481
+ title: "🛠 Admin Tools",
482
+ client_env_help: "Экспортирует готовый к редактированию .env-client, собранный из текущих URL и runtime-настроек шлюза.",
483
+ client_env_caption: "Сгенерированный .env-client из текущих настроек шлюза.",
484
+ client_env_sent: "Client .env отправлен.",
485
+ },
486
+ },
487
+ developer: {
488
+ screen: {
489
+ title: "🛠 Tools",
490
+ linked_sessions: "🔗 Привязанных сессий: {{count}}",
491
+ broadcast_help: "Broadcast записывает твоё следующее текстовое сообщение в inbox каждой привязанной сессии и будит все настроенные terminal target.",
492
+ prune_help: "Prune all очищает каждый Redis key в этом namespace telegram-mcp.",
493
+ },
494
+ },
495
+ session_info: {
496
+ opened: "Информация о сессии открыта.",
497
+ title: "ℹ Информация о сессии",
498
+ label: "📌 Label: {{value}}",
499
+ session_id: "🆔 Session ID: {{value}}",
500
+ inbox_count: "📥 Сообщений в inbox: {{count}}",
501
+ route: "🔗 Telegram route: {{value}}",
502
+ partner: "🤝 Напарник: {{value}}",
503
+ terminal_target: "🖥 terminal target: {{value}}",
504
+ yes: "да",
505
+ no: "нет",
506
+ not_linked: "не связан",
507
+ not_set: "не задан",
508
+ },
509
+ unpair: {
510
+ title: "⚠ Подтверди удаление маршрута",
511
+ active_session: "📌 Активная сессия: {{sessionName}}",
512
+ body_1: "Это удалит активный Telegram route для выбранной консоли.",
513
+ body_2: "Метаданные сессии и записи inbox останутся в Redis, пока ты не удалишь их отдельно.",
514
+ done: "Telegram route удалён: {{sessionName}}",
515
+ shown: "Telegram route удалён: {{sessionName}}",
516
+ },
517
+ prune: {
518
+ title: "⚠ Подтверди prune",
519
+ linked_sessions: "🗂 Видимых здесь сессий: {{count}}",
520
+ body_1: "Это очистит каждый Redis key внутри namespace telegram-mcp.",
521
+ body_2: "Будут удалены bindings, sessions, inbox, menu payloads и pending requests.",
522
+ done: "Prune завершён. Удалено Redis keys: {{count}}.",
523
+ },
524
+ history: {
525
+ title: "# Collab History",
526
+ session: "Сессия: {{sessionName}}",
527
+ empty: "Для этой сессии не найдено недавних Collab-событий.",
528
+ project: "Проект: {{projectName}}",
529
+ caption: "Collab history для {{sessionName}}",
530
+ },
531
+ broadcast: {
532
+ begin: "Broadcast в {{count}} сессий.",
533
+ title: "📣 Broadcast",
534
+ body: "Отправь следующее текстовое сообщение, чтобы разослать его всем {{count}} видимым сессиям.",
535
+ hint: "Сообщение будет сохранено в inbox каждой сессии, а сервис разбудит все настроенные terminal target.",
536
+ cancel_hint: "Команды вроде /menu или /help отменят режим broadcast.",
537
+ collab_begin: "Broadcast в {{count}} Collab-сессий.",
538
+ collab_title: "📣 Collab Broadcast",
539
+ collab_projects: "Collab проектов: {{count}}",
540
+ collab_sessions: "Уникальных сессий: {{count}}",
541
+ collab_body: "Отправь следующее текстовое сообщение, чтобы разослать его всем Collab-сессиям на ботах без дублирования.",
542
+ collab_hint: "Локальные сессии получат inbox message, удалённые — gateway delivery.",
543
+ no_linked_sessions: "Видимых сессий не найдено.",
544
+ no_collab_targets: "Нет доступных Collab-сессий для broadcast.",
545
+ no_projects_first: "Сначала создай проект или войди в существующий.",
546
+ mode_not_active: "Режим broadcast не активен.",
547
+ cancelled: "Broadcast отменён.",
548
+ cancelled_no_sessions: "Broadcast отменён, потому что видимых сессий не найдено.",
549
+ completed_linked: "Broadcast завершён для {{count}} видимых сессий.",
550
+ completed_collab: "Broadcast завершён для {{count}} Collab-сессий.",
551
+ completed_collab_local: "Локальных inbox: {{count}}",
552
+ completed_collab_remote: "Удалённых deliveries: {{count}}",
553
+ completed_collab_total: "Всего сессий: {{count}}",
554
+ },
555
+ project: {
556
+ not_found: "Проект не найден.",
557
+ left_callback: "Выход из проекта выполнен.",
558
+ left_screen: "Вы вышли из выбранного проекта.",
559
+ deleted_callback: "Проект удалён.",
560
+ deleted_screen: "Проект «{{projectName}}» удалён. Участники отвязаны, project state очищен.",
561
+ delete_only_owner: "Удалять проект может только owner.",
562
+ delete_menu_title: "🗑 Delete Project",
563
+ active_session: "📌 Активная сессия: {{sessionName}}",
564
+ total_count: "🗂 Проектов в Collab: {{count}}",
565
+ owner_count: "👑 Проектов, где ты owner: {{count}}",
566
+ delete_choose: "Выбери проект для полного удаления.",
567
+ delete_body: "Будут отвязаны участники, удалены project sessions и сама запись проекта.",
568
+ delete_owner_hint: "Удалять проект может только owner.",
569
+ created: "Проект создан: {{projectName}}\nInvite: {{inviteToken}}",
570
+ joined: "Вход в проект выполнен: {{projectName}}",
571
+ opened: "Открыт проект: {{projectName}}",
572
+ invalid_action: "Некорректное действие проекта.",
573
+ invalid_member_action: "Некорректное действие для участника проекта.",
574
+ invalid_member_payload: "Некорректные данные участника проекта.",
575
+ stale_member_payload: "Данные участника проекта некорректны или устарели.",
576
+ invalid_live_payload: "Некорректные данные Live View.",
577
+ stale_live_payload: "Данные Live View некорректны или устарели.",
578
+ no_telegram_user: "Не удалось определить Telegram пользователя.",
579
+ request_live_sent: "Запрос на Live отправлен на подтверждение.",
580
+ loading_members: "Загружаю участников.",
581
+ opening_members: "Открываю участников проекта.",
582
+ opening_session: "Открываю сессию.",
583
+ opening_files: "Открываю файлы.",
584
+ create_prompt_title: "📦 Создать проект",
585
+ create_prompt_body: "Отправь следующим сообщением имя проекта.",
586
+ join_prompt_title: "🔑 Вступить в проект",
587
+ join_prompt_body: "Отправь следующим сообщением invite token проекта.",
588
+ prompt_cancel: "Команды вроде /menu или /help отменят этот режим.",
589
+ start_create: "Создание проекта.",
590
+ start_join: "Вход в проект.",
591
+ data_missing: "Данные проекта не найдены.",
592
+ data_stale: "Данные проекта устарели или некорректны.",
593
+ no_active_project: "Нет активного проекта.",
594
+ left_current: "Выход из проекта выполнен.",
595
+ left_current_screen: "Вы вышли из текущего проекта.",
596
+ members_title: "👥 Участники {{projectName}}",
597
+ current_session: "Сессия: {{sessionName}}",
598
+ other_sessions: "Других сессий: {{count}}",
599
+ choose_file_target: "Выбери, кому передать этот файл.",
600
+ choose_member_action: "Выбери сессию, чтобы спросить, поделиться, ответить или передать.",
601
+ no_other_active: "В этом проекте пока нет других активных сессий.",
602
+ leave: "🚪 Выйти",
603
+ back_to_projects: "⬅ К проектам",
604
+ ask: "❓ Спросить",
605
+ share_button: "📤 Поделиться",
606
+ back_to_members: "⬅ К участникам",
607
+ back_to_session: "⬅ К сессии",
608
+ file_title: "📎 Выбор файла",
609
+ file_project: "Проект: {{projectName}}",
610
+ file_recipient: "Получатель: {{label}}",
611
+ file_choose: "Выбери файл для отправки.",
612
+ file_none: "В этой сессии нет загруженных файлов.",
613
+ invalid_approval: "Некорректное подтверждение Live View.",
614
+ invalid_approval_data: "Некорректные данные подтверждения.",
615
+ approval_stale: "Запрос Live View устарел.",
616
+ },
617
+ handoff: {
618
+ no_pending: "Нет ожидающего prompt передачи файла.",
619
+ cancelled: "Передача файла отменена.",
620
+ delivered_agent: "Файл передан агенту.",
621
+ queued_partner: "Файл поставлен в очередь доставки напарнику.",
622
+ project: "Проект: {{projectName}}",
623
+ recipient: "Получатель: {{label}}",
624
+ session: "Сессия: {{label}}",
625
+ status: "Статус: {{status}}",
626
+ share: "Share: {{shareId}}",
627
+ delivered: "доставлено",
628
+ queued: "в очереди",
629
+ prompt_title: "🤝 Передать участнику",
630
+ route: "Сессия: {{sourceSessionName}} -> {{targetSessionName}}",
631
+ file: "Файл: {{fileName}}",
632
+ prompt_body: "Отправь следующим сообщением описание или инструкции для этого файла.",
633
+ prompt_hint: "Этот текст будет приложен к handoff.",
634
+ choose_title: "📎 Выбор файла",
635
+ choose_recipient: "Получатель: {{label}}",
636
+ choose_local: "Выбери файл для отправки локальному напарнику.",
637
+ choose_project: "Выбери файл для отправки.",
638
+ no_files: "В этой сессии нет загруженных файлов.",
639
+ cancel: "Отмена",
640
+ uploaded_to_session: "Файл отправлен в сессию {{label}}.",
641
+ uploaded_to_partner: "Файл отправлен напарнику {{label}}.",
642
+ delivered_one: "Файл доставлен в сессию {{label}}.",
643
+ delivered_many: "Файлы доставлены в сессию {{label}}: {{count}}.",
644
+ },
645
+ system: {
646
+ sessions_menu_unavailable: "Меню сессий временно недоступно. Попробуй /menu ещё раз.",
647
+ gateway_relay_inbox_sent: "Сообщение отправлено в сессию {{sessionName}} через шлюз.",
648
+ gateway_relay_inbox_failed: "Не удалось отправить сообщение в выбранную gateway-сессию.",
649
+ error_prefix: "Ошибка: {{message}}",
650
+ terminal_recreated_hint: "Обычно это значит, что pane/window/session был пересоздан.",
651
+ },
652
+ };