@deadragdoll/tellymcp 0.0.10 → 0.0.12

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 (154) hide show
  1. package/.env.example.client +42 -52
  2. package/.env.example.gateway +48 -62
  3. package/CHANGELOG.md +3 -3
  4. package/README-ru.md +226 -376
  5. package/README.md +213 -1184
  6. package/TOOLS.md +320 -377
  7. package/VERSION.md +13 -13
  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 +39 -20
  15. package/config/templates/env.client.template +34 -19
  16. package/config/templates/env.gateway.template +37 -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/browser.service.js +94 -1
  23. package/dist/services/features/telegram-mcp/collaboration.service.js +40 -3
  24. package/dist/services/features/telegram-mcp/ensuredb.service.js +145 -26
  25. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +285 -103
  26. package/dist/services/features/telegram-mcp/gateway-socket.service.js +907 -85
  27. package/dist/services/features/telegram-mcp/gateway.service.js +876 -81
  28. package/dist/services/features/telegram-mcp/mcp-http.service.js +8 -0
  29. package/dist/services/features/telegram-mcp/mcp-server.service.js +17 -26
  30. package/dist/services/features/telegram-mcp/notify.service.js +127 -1
  31. package/dist/services/features/telegram-mcp/session-context.service.js +28 -1
  32. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +132 -10
  33. package/dist/services/features/telegram-mcp/src/app/config/env.js +158 -52
  34. package/dist/services/features/telegram-mcp/src/app/http.js +375 -42
  35. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +386 -58
  36. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +3 -0
  37. package/dist/services/features/telegram-mcp/src/app/webapp/terminal.js +12 -0
  38. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +120 -104
  39. package/dist/services/features/telegram-mcp/src/entities/xchange/model/types.js +2 -0
  40. package/dist/services/features/telegram-mcp/src/features/ask-user/model/askUserTelegram.js +1 -1
  41. package/dist/services/features/telegram-mcp/src/features/browser/model/browserOpenTool.js +1 -1
  42. package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +1 -1
  43. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +306 -26
  44. package/dist/services/features/telegram-mcp/src/features/collaboration/model/gatewaySessionsService.js +71 -0
  45. package/dist/services/features/telegram-mcp/src/features/collaboration/model/listGatewaySessionsTool.js +33 -0
  46. package/dist/services/features/telegram-mcp/src/features/collaboration/model/localCollaborationBackend.js +93 -82
  47. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +47 -5
  48. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileTool.js +1 -1
  49. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerNoteTool.js +1 -1
  50. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +82 -0
  51. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +22 -14
  52. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +697 -75
  53. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/remoteConsoleActionClient.js +76 -0
  54. package/dist/services/features/telegram-mcp/src/features/embedded-runtime/model/embeddedRuntimeBroker.js +92 -0
  55. package/dist/services/features/telegram-mcp/src/features/foreground-terminal/model/foregroundTerminalRuntime.js +192 -0
  56. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +382 -3
  57. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyTelegramTool.js +1 -1
  58. package/dist/services/features/telegram-mcp/src/features/notify/model/sendFileToTelegramTool.js +33 -0
  59. package/dist/services/features/telegram-mcp/src/features/session-context/model/clearSessionContextTool.js +1 -1
  60. package/dist/services/features/telegram-mcp/src/features/session-context/model/getSessionContextTool.js +1 -1
  61. package/dist/services/features/telegram-mcp/src/features/session-context/model/renameSessionTool.js +1 -1
  62. package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +42 -200
  63. package/dist/services/features/telegram-mcp/src/features/session-context/model/setSessionContextTool.js +1 -1
  64. package/dist/services/features/telegram-mcp/src/features/terminal-buffer/model/terminalBufferService.js +96 -0
  65. package/dist/services/features/telegram-mcp/src/features/terminal-input/model/terminalInputService.js +97 -0
  66. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownService.js +107 -58
  67. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownTool.js +1 -1
  68. package/dist/services/features/telegram-mcp/src/features/xchange/model/getXchangeRecordTool.js +28 -0
  69. package/dist/services/features/telegram-mcp/src/features/xchange/model/listXchangeRecordsTool.js +28 -0
  70. package/dist/services/features/telegram-mcp/src/features/xchange/model/markXchangeRecordReadTool.js +28 -0
  71. package/dist/services/features/telegram-mcp/src/features/xchange/model/xchangeService.js +169 -0
  72. package/dist/services/features/telegram-mcp/src/processes/human-approval/model/orchestrator.js +5 -4
  73. package/dist/services/features/telegram-mcp/src/shared/i18n/resources/en.js +143 -42
  74. package/dist/services/features/telegram-mcp/src/shared/i18n/resources/ru.js +139 -38
  75. package/dist/services/features/telegram-mcp/src/shared/integrations/memory/processLocalSessionStore.js +27 -0
  76. package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +11 -8
  77. package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +69 -70
  78. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/proxyFetch.js +21 -22
  79. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +444 -7093
  80. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportAttachmentStore.js +93 -0
  81. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportBroadcastActions.js +385 -0
  82. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConsoleRegistry.js +149 -0
  83. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConstructorWiring.js +642 -0
  84. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContent.js +84 -0
  85. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContext.js +78 -0
  86. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportDocumentActions.js +36 -0
  87. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportEventActions.js +292 -0
  88. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +352 -0
  89. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFormatting.js +75 -0
  90. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportGatewayActions.js +44 -0
  91. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLifecycleActions.js +161 -0
  92. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLive.js +56 -0
  93. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLiveActions.js +77 -0
  94. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuCallbacks.js +254 -0
  95. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFactories.js +538 -0
  96. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFingerprints.js +93 -0
  97. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFlow.js +344 -0
  98. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuShell.js +65 -0
  99. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuState.js +408 -0
  100. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuText.js +216 -0
  101. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMessageFlow.js +452 -0
  102. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportOutputActions.js +189 -0
  103. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPartnerActions.js +286 -0
  104. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPayloadState.js +108 -0
  105. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectActions.js +463 -0
  106. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEntryActions.js +202 -0
  107. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEvents.js +99 -0
  108. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectMenus.js +138 -0
  109. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectState.js +308 -0
  110. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectView.js +426 -0
  111. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportRequestFlow.js +278 -0
  112. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportSessionActions.js +143 -0
  113. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalActions.js +665 -0
  114. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalRuntime.js +226 -0
  115. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTypes.js +2 -0
  116. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportUtils.js +330 -0
  117. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportXchangeState.js +107 -0
  118. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +255 -0
  119. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +543 -0
  120. package/dist/services/features/telegram-mcp/src/shared/integrations/xchange/sqliteRecordStore.js +223 -0
  121. package/dist/services/features/telegram-mcp/src/shared/lib/gatewayScope.js +24 -0
  122. package/dist/services/features/telegram-mcp/src/shared/lib/logger/logger.js +6 -0
  123. package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +147 -76
  124. package/dist/services/features/telegram-mcp/src/shared/lib/telegramXchangeRecords.js +72 -0
  125. package/dist/services/features/telegram-mcp/src/shared/lib/terminalPromptDetection.js +409 -0
  126. package/dist/services/features/telegram-mcp/src/shared/lib/version/versionHandshake.js +129 -1
  127. package/dist/services/features/telegram-mcp/src/shared/lib/xchangeRecordHints.js +98 -0
  128. package/dist/services/features/telegram-mcp/standalone-http.service.js +12 -0
  129. package/dist/services/features/telegram-mcp/terminal-buffer.service.js +42 -0
  130. package/dist/services/features/telegram-mcp/terminal-input.service.js +41 -0
  131. package/dist/services/features/telegram-mcp/tools-sync.service.js +15 -1
  132. package/dist/services/features/telegram-mcp/xchange.service.js +123 -0
  133. package/docs/STANDALONE-ru.md +172 -0
  134. package/docs/STANDALONE.md +172 -0
  135. package/package.json +10 -5
  136. package/scripts/build-package-artifact.sh +27 -0
  137. package/scripts/deploy-gateway.sh +64 -0
  138. package/scripts/deploy-onebot-branch.sh +27 -0
  139. package/scripts/postinstall.js +11 -36
  140. package/STANDALONE-ru.md +0 -274
  141. package/STANDALONE.md +0 -274
  142. package/dist/services/features/telegram-mcp/inbox.service.js +0 -33
  143. package/dist/services/features/telegram-mcp/pair.service.js +0 -33
  144. package/dist/services/features/telegram-mcp/src/app/webapp/tmux.js +0 -10
  145. package/dist/services/features/telegram-mcp/src/features/inbox/model/deleteTelegramInboxMessageTool.js +0 -33
  146. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxCountTool.js +0 -33
  147. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxTool.js +0 -33
  148. package/dist/services/features/telegram-mcp/src/features/inbox/model/inboxService.js +0 -77
  149. package/dist/services/features/telegram-mcp/src/features/pair-session/model/clearSessionPairingTool.js +0 -33
  150. package/dist/services/features/telegram-mcp/src/features/pair-session/model/createSessionPairCodeTool.js +0 -33
  151. package/dist/services/features/telegram-mcp/src/features/pair-session/model/generatePairCode.js +0 -202
  152. package/dist/services/features/telegram-mcp/src/features/session-context/model/getTmuxTargetTool.js +0 -33
  153. package/dist/services/features/telegram-mcp/src/features/session-context/model/setTmuxTargetTool.js +0 -33
  154. package/dist/services/features/telegram-mcp/src/shared/integrations/tmux/client.js +0 -363
@@ -46,7 +46,7 @@ exports.enMenu = {
46
46
  partner: "🤝 Partner: <b><i>{{partnerName}}</i></b>",
47
47
  partner_hint: "Share API details, what's new, errors, and git changes with your teammate.",
48
48
  link_hint: "🔗 Link a partner session to coordinate through shared notes and files.",
49
- tmux_mode_direct: "🖧 TMUX mode: direct",
49
+ terminal_mode_direct: "🖧 Terminal mode: direct",
50
50
  },
51
51
  },
52
52
  sessions: {
@@ -55,15 +55,15 @@ exports.enMenu = {
55
55
  last_worked: "🕘 Last worked: <i>{{sessionName}}</i>",
56
56
  updated: "⏱ Updated: <i>{{timestamp}}</i>",
57
57
  current_active: "📌 Current active: <b>{{sessionName}}</b>",
58
- no_linked_sessions: "No linked sessions found for this Telegram identity.",
58
+ no_linked_sessions: "No visible sessions found for this Telegram identity.",
59
59
  },
60
60
  labels: {
61
- no_linked_sessions: "🫥 No linked sessions",
61
+ no_linked_sessions: "🫥 No visible sessions",
62
62
  unavailable: "⚠ Sessions unavailable",
63
63
  tools: "🛠 Tools",
64
64
  },
65
65
  actions: {
66
- no_linked_sessions: "No linked sessions found for this Telegram identity.",
66
+ no_linked_sessions: "No visible sessions found for this Telegram identity.",
67
67
  unavailable: "Sessions menu is temporarily unavailable.",
68
68
  refreshed: "Sessions refreshed.",
69
69
  open_tools: "Opening tools menu.",
@@ -97,9 +97,9 @@ exports.enMenu = {
97
97
  screen: {
98
98
  title: "📄 Content",
99
99
  active_session: "📌 Active session: {{sessionName}}",
100
- tmux_target: "🖥 tmux target: {{tmuxTarget}}",
100
+ terminal_target: "🖥 terminal target: {{terminalTarget}}",
101
101
  export_hint: "Choose how much pane history to export as a Markdown file.",
102
- export_modes: "Visible is the current pane viewport. Full exports the whole available tmux history.",
102
+ export_modes: "Visible is the current terminal viewport. Full exports the whole available terminal history.",
103
103
  },
104
104
  },
105
105
  browser: {
@@ -163,10 +163,10 @@ exports.enMenu = {
163
163
  info: "ℹ Info",
164
164
  rename: "✏ Rename",
165
165
  unpair: "🗑 Unpair",
166
- confirm_unpair: "⚠ Confirm unpair",
166
+ confirm_unpair: "⚠ Confirm route removal",
167
167
  },
168
168
  actions: {
169
- confirm_unpair: "Confirm unpair.",
169
+ confirm_unpair: "Confirm route removal.",
170
170
  back_to_settings: "Back to settings.",
171
171
  rename_prompt: "Send the new session title.",
172
172
  rename_body: "Send the next text message as the new title for the active session.\nCommands like /menu or /help cancel rename mode.",
@@ -174,7 +174,7 @@ exports.enMenu = {
174
174
  screen: {
175
175
  title: "⚙ Settings",
176
176
  active_session: "📌 Active session: {{sessionName}}",
177
- hint: "Open session info, rename it, or unpair it from Telegram.",
177
+ hint: "Open console info, rename it, or remove its Telegram route.",
178
178
  },
179
179
  },
180
180
  local: {
@@ -193,9 +193,9 @@ exports.enMenu = {
193
193
  link_status: "🤝 Link: {{linkedSessionName}}",
194
194
  link_status_none: "🤝 Link: not configured",
195
195
  hint_title: "Local collaboration inside one bot lives here:",
196
- hint_body: "session pairing, note exchange, and file handoff without a gateway.",
196
+ hint_body: "console linking, note exchange, and file handoff without a gateway.",
197
197
  unavailable: "Local collaboration is unavailable for this chat.",
198
- no_active_session: "No active session is selected. Pair it first via /start.",
198
+ no_active_session: "No active console is selected. Open /menu and choose one first.",
199
199
  },
200
200
  },
201
201
  link: {
@@ -302,7 +302,7 @@ exports.enMenu = {
302
302
  how_it_works: "How it works:",
303
303
  step_choose: "- choose the active session",
304
304
  step_inbox: "- ordinary Telegram messages go to that session inbox",
305
- step_nudge: "- if a tmux target is configured, the service nudges the agent automatically",
305
+ step_nudge: "- if a terminal target is configured, the service nudges the agent automatically",
306
306
  step_tools: "- the agent then reads the inbox batch through MCP tools",
307
307
  },
308
308
  live: {
@@ -341,6 +341,16 @@ exports.enMenu = {
341
341
  },
342
342
  },
343
343
  notices: {
344
+ admin: {
345
+ gateway_client_registered_title: "🆕 New gateway client registered",
346
+ gateway_session_registered_title: "🆕 New gateway session registered",
347
+ gateway_client_uuid: "Client UUID: {{value}}",
348
+ gateway_node_id: "Node: {{value}}",
349
+ gateway_package_version: "Package: {{value}}",
350
+ gateway_session_count: "Sessions in hello: {{count}}",
351
+ gateway_new_sessions: "New sessions:",
352
+ gateway_session_item: "• {{label}} ({{localSessionId}})",
353
+ },
344
354
  startup: {
345
355
  title: "✅ TellyMCP is running.",
346
356
  version: "Version: {{packageVersion}}",
@@ -354,6 +364,8 @@ exports.enMenu = {
354
364
  gateway: "Gateway: {{url}}",
355
365
  gateway_ws: "Gateway WS: {{url}}",
356
366
  browser: "Browser: {{status}}",
367
+ update_available: "Update available: {{currentVersion}} -> {{latestVersion}}",
368
+ update_command: "Update command: npm install -g {{packageName}}@{{latestVersion}}",
357
369
  hint: "Send /menu to open the session menu.",
358
370
  },
359
371
  project: {
@@ -364,9 +376,9 @@ exports.enMenu = {
364
376
  member: "Participant",
365
377
  },
366
378
  tools: {
367
- changed: "Gateway TOOLS.md changed or is missing locally.",
379
+ changed: "Gateway TOOLS.md changed or the current session hash is unknown.",
368
380
  session: "Session: {{sessionName}}",
369
- action_required: "Action required: call refresh_tools_markdown, then re-read the local TOOLS.md and apply it before continuing work.",
381
+ action_required: "Action required: call refresh_tools_markdown with the current known hash. If changed=true, read and apply the returned content before continuing work.",
370
382
  },
371
383
  version: {
372
384
  reject: "Gateway and client are protocol-incompatible. Transport for this session is blocked.",
@@ -375,22 +387,112 @@ exports.enMenu = {
375
387
  client: "Client: {{packageVersion}} / protocol {{protocolVersion}}",
376
388
  gateway: "Gateway: {{packageVersion}} / protocol {{protocolVersion}}",
377
389
  },
378
- tmux: {
379
- target_invalid_title: "⚠ Automatic tmux nudge failed for session {{sessionName}}.",
380
- target_invalid_target: "Saved tmux target is no longer valid: {{tmuxTarget}}",
381
- target_invalid_action: "Rebind the tmux target for this session.",
382
- unavailable_title: "⚠ Automatic tmux nudge was skipped for session {{sessionName}}.",
383
- unavailable_body: "tmux is unavailable on this machine right now.",
384
- unavailable_target: "tmux target: {{tmuxTarget}}",
385
- unavailable_reason: "This usually means the tmux session/server is not running or is unreachable via the current socket path.",
386
- unavailable_action: "Start tmux and the agent inside it, or update/remove the tmux target for this session.",
390
+ terminal: {
391
+ target_invalid_title: "⚠ Automatic terminal nudge failed for session {{sessionName}}.",
392
+ target_invalid_target: "Saved terminal target is no longer valid: {{terminalTarget}}",
393
+ target_invalid_action: "Rebind the terminal target for this session.",
394
+ unavailable_title: "⚠ Automatic terminal nudge was skipped for session {{sessionName}}.",
395
+ unavailable_body: "Terminal runtime is unavailable on this machine right now.",
396
+ unavailable_target: "terminal target: {{terminalTarget}}",
397
+ unavailable_reason: "This usually means the terminal runtime is not running or is unreachable for the current target.",
398
+ unavailable_action: "Restart the terminal runtime for this console, or update/remove the terminal target for this session.",
399
+ prompt_detected_title: "🛎 Possible blocker in {{sessionName}}",
400
+ prompt_detected_score: "Detection score: {{score}}",
401
+ prompt_detected_target: "terminal target: {{terminalTarget}}",
402
+ prompt_detected_hint: "Open Live or answer in the terminal if this prompt really needs you.",
403
+ prompt_detected_excerpt: "Recent prompt lines:",
404
+ prompt_action_sent: "Sent {{action}} to terminal.",
405
+ prompt_action_stale: "This blocker action is no longer available.",
406
+ prompt_action_failed: "Failed to send the action to terminal.",
407
+ prompt_action_invalid: "Invalid blocker action.",
408
+ },
409
+ },
410
+ admin: {
411
+ auth: {
412
+ prompt: "Gateway admin access is locked. Send /auth <token> to continue.",
413
+ help: "This gateway bot requires admin authentication first. Send /auth <token>.",
414
+ required_callback: "Authenticate first with /auth <token>.",
415
+ invalid: "Admin token is invalid.",
416
+ success: "Gateway admin authentication accepted. You can continue with commands and menus.",
417
+ disabled: "Gateway admin authentication is not enabled.",
418
+ },
419
+ buttons: {
420
+ clients: "Clients",
421
+ tools: "Tools",
422
+ client_env: "Client .env",
423
+ },
424
+ actions: {
425
+ open_clients: "Opening clients.",
426
+ open_client_sessions: "Opening client sessions.",
427
+ open_client_session: "Opening session.",
428
+ open_tools: "Opening tools.",
429
+ back_to_admin: "Back to admin.",
430
+ back_to_clients: "Back to clients.",
431
+ back_to_client_sessions: "Back to client sessions.",
432
+ },
433
+ screen: {
434
+ title: "🛡 Gateway Admin",
435
+ help: "Use the admin menu to inspect gateway clients and export a client .env.",
436
+ gateway_clients: "Known clients: {{count}}",
437
+ gateway_clients_connected: "Connected via gateway WS: {{count}}",
438
+ gateway_clients_registered: "Registered active sessions: {{count}}",
439
+ gateway_clients_unavailable: "Known clients: unavailable right now.",
440
+ hint: "Choose a section below.",
441
+ },
442
+ clients: {
443
+ title: "🖥 Gateway Clients",
444
+ empty: "The gateway does not know any clients yet.",
445
+ unavailable: "The gateway client list is unavailable right now.",
446
+ connected_count: "Connected via gateway WS: {{count}}",
447
+ registered_count: "Registered active sessions: {{count}}",
448
+ legend: "Legend: 🟢 connected right now, 🗂 has registered active sessions.",
449
+ item: "• {{label}}",
450
+ bot: " Bot: {{botUsername}}",
451
+ sessions: " Sessions: {{count}}",
452
+ last_seen: " Last seen: {{value}}",
453
+ },
454
+ client_sessions: {
455
+ buttons: {
456
+ collab: "👥 Collab",
457
+ all: "🗂 All",
458
+ },
459
+ title: "🧩 Client Sessions",
460
+ client: "Client: <b>{{client}}</b>",
461
+ total: "Sessions: {{count}}",
462
+ choose: "Choose a session below.",
463
+ choose_scope: "Choose which sessions to inspect.",
464
+ scope_collab: "Scope: Collab",
465
+ scope_all: "Scope: All known sessions",
466
+ empty: "This client has no active sessions.",
467
+ empty_all: "This client has no known sessions right now.",
468
+ unavailable: "The client session list is unavailable right now.",
469
+ updated: " Updated: {{timestamp}}",
470
+ project: " Project: <b>{{projectName}}</b>",
471
+ no_client_selected: "Choose a client first.",
472
+ invalid_action: "Invalid client action.",
473
+ not_found: "The selected client is no longer available.",
474
+ back_to_scope: "⬅ Back to views",
475
+ },
476
+ client_session_detail: {
477
+ title: "🖥 Client Session",
478
+ session: "Session: <b>{{sessionName}}</b>",
479
+ project: "Project: <b>{{projectName}}</b>",
480
+ bind: "🔗 Link here",
481
+ bound: "Session linked: {{sessionName}}",
482
+ back_to_sessions: "⬅ Back to sessions",
483
+ },
484
+ tools: {
485
+ title: "🛠 Admin Tools",
486
+ client_env_help: "Export a ready-to-edit .env-client built from the current gateway URLs and runtime settings.",
487
+ client_env_caption: "Generated .env-client from current gateway settings.",
488
+ client_env_sent: "Client .env sent.",
387
489
  },
388
490
  },
389
491
  developer: {
390
492
  screen: {
391
493
  title: "🛠 Tools",
392
- linked_sessions: "🔗 Linked sessions: {{count}}",
393
- broadcast_help: "Broadcast writes your next text message into every linked session inbox and nudges every configured tmux target.",
494
+ linked_sessions: "🗂 Visible sessions: {{count}}",
495
+ broadcast_help: "Broadcast writes your next text message into every linked session inbox and nudges every configured terminal target.",
394
496
  prune_help: "Prune all clears every Redis key under this Telegram MCP namespace.",
395
497
  },
396
498
  },
@@ -400,30 +502,27 @@ exports.enMenu = {
400
502
  label: "📌 Label: {{value}}",
401
503
  session_id: "🆔 Session ID: {{value}}",
402
504
  inbox_count: "📥 Inbox count: {{count}}",
403
- paired: "🔗 Paired: {{value}}",
505
+ route: "🔗 Telegram route: {{value}}",
404
506
  partner: "🤝 Partner: {{value}}",
405
- tmux_target: "🖥 tmux target: {{value}}",
406
- tmux_session: "📺 tmux session: {{value}}",
407
- tmux_window: "🪟 tmux window: {{value}}",
408
- tmux_pane: "🔹 tmux pane: {{value}}",
507
+ terminal_target: "🖥 terminal target: {{value}}",
409
508
  yes: "yes",
410
509
  no: "no",
411
510
  not_linked: "not linked",
412
511
  not_set: "not set",
413
512
  },
414
513
  unpair: {
415
- title: "⚠ Confirm unpair",
514
+ title: "⚠ Confirm route removal",
416
515
  active_session: "📌 Active session: {{sessionName}}",
417
- body_1: "This removes the Telegram binding for the active session.",
516
+ body_1: "This removes the active Telegram route for the selected console.",
418
517
  body_2: "Session metadata and inbox records remain in Redis until you delete them separately.",
419
- done: "Unpaired: {{sessionName}}",
420
- shown: "Session unpaired: {{sessionName}}",
518
+ done: "Telegram route removed: {{sessionName}}",
519
+ shown: "Telegram route removed: {{sessionName}}",
421
520
  },
422
521
  prune: {
423
522
  title: "⚠ Confirm prune",
424
- linked_sessions: "🔗 Linked sessions visible here: {{count}}",
523
+ linked_sessions: "🗂 Visible sessions here: {{count}}",
425
524
  body_1: "This clears every Redis key under the telegram-mcp namespace.",
426
- body_2: "Pair codes, bindings, sessions, inbox, menu payloads, and pending requests will all be deleted.",
525
+ body_2: "Bindings, sessions, inbox, menu payloads, and pending requests will all be deleted.",
427
526
  done: "Prune complete. Deleted {{count}} Redis keys.",
428
527
  },
429
528
  history: {
@@ -436,8 +535,8 @@ exports.enMenu = {
436
535
  broadcast: {
437
536
  begin: "Broadcast to {{count}} sessions.",
438
537
  title: "📣 Broadcast",
439
- body: "Send the next text message to broadcast it to all {{count}} linked sessions.",
440
- hint: "The message will be stored in every session inbox and the service will nudge every configured tmux target.",
538
+ body: "Send the next text message to broadcast it to all {{count}} visible sessions.",
539
+ hint: "The message will be stored in every session inbox and the service will nudge every configured terminal target.",
441
540
  cancel_hint: "Commands like /menu or /help cancel broadcast mode.",
442
541
  collab_begin: "Broadcast to {{count}} collab sessions.",
443
542
  collab_title: "📣 Collab Broadcast",
@@ -445,13 +544,13 @@ exports.enMenu = {
445
544
  collab_sessions: "Unique sessions: {{count}}",
446
545
  collab_body: "Send the next text message to broadcast it to all Collab sessions across bots without duplication.",
447
546
  collab_hint: "Local sessions receive an inbox message, remote sessions receive a gateway delivery.",
448
- no_linked_sessions: "No linked sessions found.",
547
+ no_linked_sessions: "No visible sessions found.",
449
548
  no_collab_targets: "No Collab sessions are available for broadcast.",
450
549
  no_projects_first: "Create a project or join an existing one first.",
451
550
  mode_not_active: "Broadcast mode is not active.",
452
551
  cancelled: "Broadcast cancelled.",
453
- cancelled_no_sessions: "Broadcast was cancelled because no linked sessions were found.",
454
- completed_linked: "Broadcast completed for {{count}} linked sessions.",
552
+ cancelled_no_sessions: "Broadcast was cancelled because no visible sessions were found.",
553
+ completed_linked: "Broadcast completed for {{count}} visible sessions.",
455
554
  completed_collab: "Broadcast completed for {{count}} Collab sessions.",
456
555
  completed_collab_local: "Local inbox: {{count}}",
457
556
  completed_collab_remote: "Remote deliveries: {{count}}",
@@ -549,7 +648,9 @@ exports.enMenu = {
549
648
  },
550
649
  system: {
551
650
  sessions_menu_unavailable: "Sessions menu is temporarily unavailable. Try /menu again.",
651
+ gateway_relay_inbox_sent: "Message routed to session {{sessionName}} through the gateway.",
652
+ gateway_relay_inbox_failed: "Failed to route the message to the selected gateway session.",
552
653
  error_prefix: "Error: {{message}}",
553
- tmux_recreated_hint: "This usually means the pane/window/session was recreated.",
654
+ terminal_recreated_hint: "This usually means the pane/window/session was recreated.",
554
655
  },
555
656
  };
@@ -46,7 +46,7 @@ exports.ruMenu = {
46
46
  partner: "🤝 Напарник: <b><i>{{partnerName}}</i></b>",
47
47
  partner_hint: "Делись с напарником деталями API, изменениями, ошибками и git-контекстом.",
48
48
  link_hint: "🔗 Свяжи напарника, чтобы координироваться через общие заметки и файлы.",
49
- tmux_mode_direct: "🖧 Режим TMUX: direct",
49
+ terminal_mode_direct: "🖧 Режим терминала: direct",
50
50
  },
51
51
  },
52
52
  sessions: {
@@ -55,15 +55,15 @@ exports.ruMenu = {
55
55
  last_worked: "🕘 Последняя работа: <i>{{sessionName}}</i>",
56
56
  updated: "⏱ Обновлено: <i>{{timestamp}}</i>",
57
57
  current_active: "📌 Текущая активная: <b>{{sessionName}}</b>",
58
- no_linked_sessions: "Для этой Telegram identity не найдено привязанных сессий.",
58
+ no_linked_sessions: "Для этой Telegram identity не найдено видимых сессий.",
59
59
  },
60
60
  labels: {
61
- no_linked_sessions: "🫥 Нет привязанных сессий",
61
+ no_linked_sessions: "🫥 Нет видимых сессий",
62
62
  unavailable: "⚠ Сессии недоступны",
63
63
  tools: "🛠 Tools",
64
64
  },
65
65
  actions: {
66
- no_linked_sessions: "Для этой Telegram identity не найдено привязанных сессий.",
66
+ no_linked_sessions: "Для этой Telegram identity не найдено видимых сессий.",
67
67
  unavailable: "Меню сессий временно недоступно.",
68
68
  refreshed: "Список сессий обновлён.",
69
69
  open_tools: "Открываю инструменты.",
@@ -97,9 +97,9 @@ exports.ruMenu = {
97
97
  screen: {
98
98
  title: "📄 Content",
99
99
  active_session: "📌 Активная сессия: {{sessionName}}",
100
- tmux_target: "🖥 tmux target: {{tmuxTarget}}",
100
+ terminal_target: "🖥 terminal target: {{terminalTarget}}",
101
101
  export_hint: "Выбери, сколько истории pane экспортировать в Markdown-файл.",
102
- export_modes: "Visible отдаёт текущий viewport pane. Full экспортирует всю доступную tmux-историю.",
102
+ export_modes: "Visible отдаёт текущий viewport терминала. Full экспортирует всю доступную историю терминала.",
103
103
  },
104
104
  },
105
105
  browser: {
@@ -163,10 +163,10 @@ exports.ruMenu = {
163
163
  info: "ℹ Info",
164
164
  rename: "✏ Rename",
165
165
  unpair: "🗑 Unpair",
166
- confirm_unpair: "⚠ Подтвердить отвязку",
166
+ confirm_unpair: "⚠ Подтвердить удаление маршрута",
167
167
  },
168
168
  actions: {
169
- confirm_unpair: "Подтверди отвязку.",
169
+ confirm_unpair: "Подтверди удаление маршрута.",
170
170
  back_to_settings: "Назад к настройкам.",
171
171
  rename_prompt: "Отправь новое название сессии.",
172
172
  rename_body: "Отправь следующим текстовым сообщением новое название активной сессии.\nКоманды вроде /menu или /help отменят режим переименования.",
@@ -302,7 +302,7 @@ exports.ruMenu = {
302
302
  how_it_works: "Как это работает:",
303
303
  step_choose: "- выбери активную сессию",
304
304
  step_inbox: "- обычные Telegram-сообщения попадают в inbox этой сессии",
305
- step_nudge: "- если настроен tmux target, сервис автоматически будит агента",
305
+ step_nudge: "- если настроен terminal target, сервис автоматически будит агента",
306
306
  step_tools: "- затем агент читает batch inbox через MCP tools",
307
307
  },
308
308
  live: {
@@ -341,6 +341,16 @@ exports.ruMenu = {
341
341
  },
342
342
  },
343
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
+ },
344
354
  startup: {
345
355
  title: "✅ TellyMCP запущен.",
346
356
  version: "Версия: {{packageVersion}}",
@@ -354,6 +364,8 @@ exports.ruMenu = {
354
364
  gateway: "Gateway: {{url}}",
355
365
  gateway_ws: "Gateway WS: {{url}}",
356
366
  browser: "Browser: {{status}}",
367
+ update_available: "Доступно обновление: {{currentVersion}} -> {{latestVersion}}",
368
+ update_command: "Команда обновления: npm install -g {{packageName}}@{{latestVersion}}",
357
369
  hint: "Напиши /menu, чтобы открыть меню сессий.",
358
370
  },
359
371
  project: {
@@ -364,9 +376,9 @@ exports.ruMenu = {
364
376
  member: "Участник",
365
377
  },
366
378
  tools: {
367
- changed: "TOOLS.md обновлён на шлюзе или отсутствует локально.",
379
+ changed: "TOOLS.md обновлён на шлюзе или хэш текущей сессии ещё неизвестен.",
368
380
  session: "Сессия: {{sessionName}}",
369
- action_required: "Действие обязательно: вызови refresh_tools_markdown, затем перечитай локальный TOOLS.md и применяй его перед продолжением работы.",
381
+ action_required: "Действие обязательно: вызови refresh_tools_markdown с текущим known hash. Если changed=true, прочитай и примени возвращённый content перед продолжением работы.",
370
382
  },
371
383
  version: {
372
384
  reject: "Шлюз и клиент несовместимы по протоколу. Транспорт этой сессии заблокирован.",
@@ -375,22 +387,112 @@ exports.ruMenu = {
375
387
  client: "Клиент: {{packageVersion}} / protocol {{protocolVersion}}",
376
388
  gateway: "Шлюз: {{packageVersion}} / protocol {{protocolVersion}}",
377
389
  },
378
- tmux: {
379
- target_invalid_title: "⚠ Автоматический tmux nudge для сессии {{sessionName}} не сработал.",
380
- target_invalid_target: "Сохранённый tmux target больше недействителен: {{tmuxTarget}}",
381
- target_invalid_action: "Перепривяжи tmux target для этой сессии.",
382
- unavailable_title: "⚠ Автоматический tmux nudge для сессии {{sessionName}} пропущен.",
383
- unavailable_body: "tmux сейчас недоступен на этой машине.",
384
- unavailable_target: "tmux target: {{tmuxTarget}}",
385
- unavailable_reason: "Обычно это значит, что tmux session/server не запущен или недоступен по текущему socket path.",
386
- unavailable_action: "Запусти tmux и агента внутри него, либо обнови/сними tmux target для этой сессии.",
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
+ prompt_action_sent: "Отправил {{action}} в терминал.",
405
+ prompt_action_stale: "Это действие для блокера уже недоступно.",
406
+ prompt_action_failed: "Не удалось отправить действие в терминал.",
407
+ prompt_action_invalid: "Некорректное действие блокера.",
408
+ },
409
+ },
410
+ admin: {
411
+ auth: {
412
+ prompt: "Доступ к gateway-боту закрыт. Отправь /auth <token>, чтобы продолжить.",
413
+ help: "Этот gateway-бот требует предварительную admin-аутентификацию. Отправь /auth <token>.",
414
+ required_callback: "Сначала авторизуйся через /auth <token>.",
415
+ invalid: "Admin token неверный.",
416
+ success: "Admin-аутентификация шлюза принята. Теперь можно пользоваться командами и меню.",
417
+ disabled: "Admin-аутентификация шлюза не включена.",
418
+ },
419
+ buttons: {
420
+ clients: "Clients",
421
+ tools: "Tools",
422
+ client_env: "Client .env",
423
+ },
424
+ actions: {
425
+ open_clients: "Открываю список клиентов.",
426
+ open_client_sessions: "Открываю сессии клиента.",
427
+ open_client_session: "Открываю сессию.",
428
+ open_tools: "Открываю инструменты.",
429
+ back_to_admin: "Назад в admin.",
430
+ back_to_clients: "Назад к клиентам.",
431
+ back_to_client_sessions: "Назад к сессиям клиента.",
432
+ },
433
+ screen: {
434
+ title: "🛡 Gateway Admin",
435
+ help: "Используй admin-меню, чтобы смотреть клиентов шлюза и экспортировать клиентский .env.",
436
+ gateway_clients: "Известных клиентов: {{count}}",
437
+ gateway_clients_connected: "Подключены по gateway WS: {{count}}",
438
+ gateway_clients_registered: "Зарегистрированы active sessions: {{count}}",
439
+ gateway_clients_unavailable: "Список клиентов шлюза сейчас недоступен.",
440
+ hint: "Выбери нужный раздел ниже.",
441
+ },
442
+ clients: {
443
+ title: "🖥 Клиенты шлюза",
444
+ empty: "Шлюз пока не знает ни одного клиента.",
445
+ unavailable: "Список клиентов шлюза сейчас недоступен.",
446
+ connected_count: "Подключены по gateway WS: {{count}}",
447
+ registered_count: "Зарегистрированы active sessions: {{count}}",
448
+ legend: "Легенда: 🟢 сейчас подключён, 🗂 есть зарегистрированные active sessions.",
449
+ item: "• {{label}}",
450
+ bot: " Бот: {{botUsername}}",
451
+ sessions: " Сессий: {{count}}",
452
+ last_seen: " Последняя активность: {{value}}",
453
+ },
454
+ client_sessions: {
455
+ buttons: {
456
+ collab: "👥 Collab",
457
+ all: "🗂 All",
458
+ },
459
+ title: "🧩 Сессии клиента",
460
+ client: "Клиент: <b>{{client}}</b>",
461
+ total: "Сессий: {{count}}",
462
+ choose: "Выбери сессию ниже.",
463
+ choose_scope: "Выбери, какой набор сессий смотреть.",
464
+ scope_collab: "Срез: Collab",
465
+ scope_all: "Срез: все известные сессии",
466
+ empty: "У этого клиента нет активных сессий.",
467
+ empty_all: "У этого клиента сейчас нет известных сессий.",
468
+ unavailable: "Список сессий клиента сейчас недоступен.",
469
+ updated: " Обновлено: {{timestamp}}",
470
+ project: " Проект: <b>{{projectName}}</b>",
471
+ no_client_selected: "Сначала выбери клиента.",
472
+ invalid_action: "Некорректное действие с клиентом.",
473
+ not_found: "Выбранный клиент больше недоступен.",
474
+ back_to_scope: "⬅ Назад к видам",
475
+ },
476
+ client_session_detail: {
477
+ title: "🖥 Сессия клиента",
478
+ session: "Сессия: <b>{{sessionName}}</b>",
479
+ project: "Проект: <b>{{projectName}}</b>",
480
+ bind: "🔗 Привязать сюда",
481
+ bound: "Сессия привязана: {{sessionName}}",
482
+ back_to_sessions: "⬅ Назад к сессиям",
483
+ },
484
+ tools: {
485
+ title: "🛠 Admin Tools",
486
+ client_env_help: "Экспортирует готовый к редактированию .env-client, собранный из текущих URL и runtime-настроек шлюза.",
487
+ client_env_caption: "Сгенерированный .env-client из текущих настроек шлюза.",
488
+ client_env_sent: "Client .env отправлен.",
387
489
  },
388
490
  },
389
491
  developer: {
390
492
  screen: {
391
493
  title: "🛠 Tools",
392
494
  linked_sessions: "🔗 Привязанных сессий: {{count}}",
393
- broadcast_help: "Broadcast записывает твоё следующее текстовое сообщение в inbox каждой привязанной сессии и будит все настроенные tmux target.",
495
+ broadcast_help: "Broadcast записывает твоё следующее текстовое сообщение в inbox каждой привязанной сессии и будит все настроенные terminal target.",
394
496
  prune_help: "Prune all очищает каждый Redis key в этом namespace telegram-mcp.",
395
497
  },
396
498
  },
@@ -400,30 +502,27 @@ exports.ruMenu = {
400
502
  label: "📌 Label: {{value}}",
401
503
  session_id: "🆔 Session ID: {{value}}",
402
504
  inbox_count: "📥 Сообщений в inbox: {{count}}",
403
- paired: "🔗 Привязана: {{value}}",
505
+ route: "🔗 Telegram route: {{value}}",
404
506
  partner: "🤝 Напарник: {{value}}",
405
- tmux_target: "🖥 tmux target: {{value}}",
406
- tmux_session: "📺 tmux session: {{value}}",
407
- tmux_window: "🪟 tmux window: {{value}}",
408
- tmux_pane: "🔹 tmux pane: {{value}}",
507
+ terminal_target: "🖥 terminal target: {{value}}",
409
508
  yes: "да",
410
509
  no: "нет",
411
510
  not_linked: "не связан",
412
511
  not_set: "не задан",
413
512
  },
414
513
  unpair: {
415
- title: "⚠ Подтверди отвязку",
514
+ title: "⚠ Подтверди удаление маршрута",
416
515
  active_session: "📌 Активная сессия: {{sessionName}}",
417
- body_1: "Это удалит Telegram binding для активной сессии.",
516
+ body_1: "Это удалит активный Telegram route для выбранной консоли.",
418
517
  body_2: "Метаданные сессии и записи inbox останутся в Redis, пока ты не удалишь их отдельно.",
419
- done: "Отвязано: {{sessionName}}",
420
- shown: "Сессия отвязана: {{sessionName}}",
518
+ done: "Telegram route удалён: {{sessionName}}",
519
+ shown: "Telegram route удалён: {{sessionName}}",
421
520
  },
422
521
  prune: {
423
522
  title: "⚠ Подтверди prune",
424
- linked_sessions: "🔗 Видимых здесь привязанных сессий: {{count}}",
523
+ linked_sessions: "🗂 Видимых здесь сессий: {{count}}",
425
524
  body_1: "Это очистит каждый Redis key внутри namespace telegram-mcp.",
426
- body_2: "Будут удалены pair codes, bindings, sessions, inbox, menu payloads и pending requests.",
525
+ body_2: "Будут удалены bindings, sessions, inbox, menu payloads и pending requests.",
427
526
  done: "Prune завершён. Удалено Redis keys: {{count}}.",
428
527
  },
429
528
  history: {
@@ -436,8 +535,8 @@ exports.ruMenu = {
436
535
  broadcast: {
437
536
  begin: "Broadcast в {{count}} сессий.",
438
537
  title: "📣 Broadcast",
439
- body: "Отправь следующее текстовое сообщение, чтобы разослать его всем {{count}} привязанным сессиям.",
440
- hint: "Сообщение будет сохранено в inbox каждой сессии, а сервис разбудит все настроенные tmux target.",
538
+ body: "Отправь следующее текстовое сообщение, чтобы разослать его всем {{count}} видимым сессиям.",
539
+ hint: "Сообщение будет сохранено в inbox каждой сессии, а сервис разбудит все настроенные terminal target.",
441
540
  cancel_hint: "Команды вроде /menu или /help отменят режим broadcast.",
442
541
  collab_begin: "Broadcast в {{count}} Collab-сессий.",
443
542
  collab_title: "📣 Collab Broadcast",
@@ -445,13 +544,13 @@ exports.ruMenu = {
445
544
  collab_sessions: "Уникальных сессий: {{count}}",
446
545
  collab_body: "Отправь следующее текстовое сообщение, чтобы разослать его всем Collab-сессиям на ботах без дублирования.",
447
546
  collab_hint: "Локальные сессии получат inbox message, удалённые — gateway delivery.",
448
- no_linked_sessions: "Привязанных сессий не найдено.",
547
+ no_linked_sessions: "Видимых сессий не найдено.",
449
548
  no_collab_targets: "Нет доступных Collab-сессий для broadcast.",
450
549
  no_projects_first: "Сначала создай проект или войди в существующий.",
451
550
  mode_not_active: "Режим broadcast не активен.",
452
551
  cancelled: "Broadcast отменён.",
453
- cancelled_no_sessions: "Broadcast отменён, потому что привязанных сессий не найдено.",
454
- completed_linked: "Broadcast завершён для {{count}} привязанных сессий.",
552
+ cancelled_no_sessions: "Broadcast отменён, потому что видимых сессий не найдено.",
553
+ completed_linked: "Broadcast завершён для {{count}} видимых сессий.",
455
554
  completed_collab: "Broadcast завершён для {{count}} Collab-сессий.",
456
555
  completed_collab_local: "Локальных inbox: {{count}}",
457
556
  completed_collab_remote: "Удалённых deliveries: {{count}}",
@@ -549,7 +648,9 @@ exports.ruMenu = {
549
648
  },
550
649
  system: {
551
650
  sessions_menu_unavailable: "Меню сессий временно недоступно. Попробуй /menu ещё раз.",
651
+ gateway_relay_inbox_sent: "Сообщение отправлено в сессию {{sessionName}} через шлюз.",
652
+ gateway_relay_inbox_failed: "Не удалось отправить сообщение в выбранную gateway-сессию.",
552
653
  error_prefix: "Ошибка: {{message}}",
553
- tmux_recreated_hint: "Обычно это значит, что pane/window/session был пересоздан.",
654
+ terminal_recreated_hint: "Обычно это значит, что pane/window/session был пересоздан.",
554
655
  },
555
656
  };