@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.enMenu = exports.enCommon = void 0;
4
+ exports.enCommon = {
5
+ errors: {
6
+ no_telegram_identity: "Telegram identity is unavailable for this chat.",
7
+ no_active_session: "No active session is linked yet. Pair a session via /start <code>.",
8
+ missing_telegram_context: "Telegram user or chat is missing.",
9
+ },
10
+ menu: {
11
+ refreshed: "Menu refreshed.",
12
+ gateway_unavailable: "Gateway unavailable",
13
+ no_telegram_identity_label: "No Telegram identity",
14
+ no_active_session_label: "No active session",
15
+ back: "⬅ Back",
16
+ refresh: "🔄 Refresh",
17
+ close: "✖ Close",
18
+ delete: "🗑 Delete",
19
+ get: "📥 Get",
20
+ },
21
+ };
22
+ exports.enMenu = {
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: "⬅ Back",
33
+ },
34
+ actions: {
35
+ open_content: "Opening content menu.",
36
+ open_browser: "Opening browser menu.",
37
+ open_inbox: "Opening inbox.",
38
+ open_storage: "Opening storage.",
39
+ open_settings: "Opening settings.",
40
+ back_to_sessions: "Back to sessions.",
41
+ },
42
+ screen: {
43
+ title: "🎛 Session: {{sessionName}}",
44
+ inbox_messages: "📥 Inbox messages: {{count}}",
45
+ project: "📦 Project: <b>{{projectName}}</b>",
46
+ partner: "🤝 Partner: <b><i>{{partnerName}}</i></b>",
47
+ partner_hint: "Share API details, what's new, errors, and git changes with your teammate.",
48
+ link_hint: "🔗 Link a partner session to coordinate through shared notes and files.",
49
+ terminal_mode_direct: "🖧 Terminal mode: direct",
50
+ },
51
+ },
52
+ sessions: {
53
+ screen: {
54
+ title: "🗂 Choose active session",
55
+ last_worked: "🕘 Last worked: <i>{{sessionName}}</i>",
56
+ updated: "⏱ Updated: <i>{{timestamp}}</i>",
57
+ current_active: "📌 Current active: <b>{{sessionName}}</b>",
58
+ no_linked_sessions: "No visible sessions found for this Telegram identity.",
59
+ },
60
+ labels: {
61
+ no_linked_sessions: "🫥 No visible sessions",
62
+ unavailable: "⚠ Sessions unavailable",
63
+ tools: "🛠 Tools",
64
+ },
65
+ actions: {
66
+ no_linked_sessions: "No visible sessions found for this Telegram identity.",
67
+ unavailable: "Sessions menu is temporarily unavailable.",
68
+ refreshed: "Sessions refreshed.",
69
+ open_tools: "Opening tools menu.",
70
+ },
71
+ },
72
+ inbox: {
73
+ button: "📥 Inbox",
74
+ button_count: "📥 Inbox ({{count}})",
75
+ screen: {
76
+ title: "📥 Inbox",
77
+ active_session: "📌 Active session: {{sessionName}}",
78
+ stored_messages: "📨 Stored messages: {{count}}",
79
+ choose_message: "Choose a message below to inspect or delete it.",
80
+ empty: "No stored unsolicited Telegram messages for this session.",
81
+ },
82
+ labels: {
83
+ empty: "📭 Inbox is empty",
84
+ },
85
+ actions: {
86
+ empty: "No unsolicited Telegram messages are stored.",
87
+ refreshed: "Inbox refreshed.",
88
+ },
89
+ },
90
+ buffer: {
91
+ buttons: {
92
+ visible: "👁 Visible",
93
+ full: "🧾 Full",
94
+ last_300: "📄 Last 300",
95
+ last_1000: "📄 Last 1000",
96
+ },
97
+ screen: {
98
+ title: "📄 Content",
99
+ active_session: "📌 Active session: {{sessionName}}",
100
+ terminal_target: "🖥 terminal target: {{terminalTarget}}",
101
+ export_hint: "Choose how much pane history to export as a Markdown file.",
102
+ export_modes: "Visible is the current terminal viewport. Full exports the whole available terminal history.",
103
+ },
104
+ },
105
+ browser: {
106
+ buttons: {
107
+ screenshots: "📸 Screenshots",
108
+ screenshots_count: "📸 Screenshots ({{count}})",
109
+ },
110
+ actions: {
111
+ open_screenshots: "Opening screenshots.",
112
+ back_to_session_menu: "Back to session menu.",
113
+ refreshed: "Screenshots refreshed.",
114
+ back_to_browser_menu: "Back to browser menu.",
115
+ },
116
+ screen: {
117
+ title: "🌐 Browser",
118
+ active_session: "📌 Active session: {{sessionName}}",
119
+ stored_screenshots: "📸 Stored screenshots: {{count}}",
120
+ choose_action: "Choose a browser-related action below.",
121
+ },
122
+ },
123
+ screenshots: {
124
+ screen: {
125
+ title: "📸 Screenshots",
126
+ active_session: "📌 Active session: {{sessionName}}",
127
+ stored_screenshots: "📦 Stored screenshots: {{count}}",
128
+ choose_screenshot: "Choose a screenshot below to get it in Telegram or delete it.",
129
+ empty: "No browser screenshots are stored for this session.",
130
+ },
131
+ labels: {
132
+ empty: "📭 No screenshots",
133
+ },
134
+ actions: {
135
+ empty: "No screenshots are stored for this session.",
136
+ refreshed: "Screenshots refreshed.",
137
+ back_to_screenshots: "Back to screenshots.",
138
+ },
139
+ },
140
+ storage: {
141
+ buttons: {
142
+ get: "📥 Get",
143
+ delete: "🗑 Delete",
144
+ },
145
+ actions: {
146
+ back_to_storage: "Back to storage.",
147
+ refreshed: "Storage refreshed.",
148
+ empty: "No files are stored in .mcp-xchange for this session yet.",
149
+ },
150
+ screen: {
151
+ title: "📦 Storage",
152
+ active_session: "📌 Active session: {{sessionName}}",
153
+ stored_files: "📦 Stored files: {{count}}",
154
+ choose_file: "Choose a file below to inspect it or send it to Telegram.",
155
+ empty: "No .mcp-xchange files are stored for this session.",
156
+ },
157
+ labels: {
158
+ empty: "📭 Storage is empty",
159
+ },
160
+ },
161
+ settings: {
162
+ buttons: {
163
+ info: "ℹ Info",
164
+ rename: "✏ Rename",
165
+ unpair: "🗑 Unpair",
166
+ confirm_unpair: "⚠ Confirm route removal",
167
+ },
168
+ actions: {
169
+ confirm_unpair: "Confirm route removal.",
170
+ back_to_settings: "Back to settings.",
171
+ rename_prompt: "Send the new session title.",
172
+ rename_body: "Send the next text message as the new title for the active session.\nCommands like /menu or /help cancel rename mode.",
173
+ },
174
+ screen: {
175
+ title: "⚙ Settings",
176
+ active_session: "📌 Active session: {{sessionName}}",
177
+ hint: "Open console info, rename it, or remove its Telegram route.",
178
+ },
179
+ },
180
+ local: {
181
+ buttons: {
182
+ partner: "🤝 Partner",
183
+ link: "🔗 Link",
184
+ unlink: "🔓 Unlink",
185
+ },
186
+ actions: {
187
+ open_local: "Opening local collaboration.",
188
+ back_to_session_menu: "Back to session menu.",
189
+ },
190
+ screen: {
191
+ title: "🏠 Local",
192
+ active_session: "📌 Active session: {{sessionName}}",
193
+ link_status: "🤝 Link: {{linkedSessionName}}",
194
+ link_status_none: "🤝 Link: not configured",
195
+ hint_title: "Local collaboration inside one bot lives here:",
196
+ hint_body: "console linking, note exchange, and file handoff without a gateway.",
197
+ unavailable: "Local collaboration is unavailable for this chat.",
198
+ no_active_session: "No active console is selected. Open /menu and choose one first.",
199
+ },
200
+ },
201
+ link: {
202
+ buttons: {
203
+ link: "🔗 Link",
204
+ unlink_with_name: "🔓 Unlink {{sessionName}}",
205
+ unlink: "🔓 Unlink",
206
+ },
207
+ labels: {
208
+ no_partner_sessions: "🫥 No partner sessions",
209
+ },
210
+ actions: {
211
+ no_partner_sessions: "No other linked sessions are available.",
212
+ back_to_session_menu: "Back to session menu.",
213
+ unlinked: "Partner session unlinked.",
214
+ choose_partner: "Choose a partner session.",
215
+ },
216
+ screen: {
217
+ title: "🔗 Link partner",
218
+ active_session: "📌 Active session: {{sessionName}}",
219
+ choose_partner: "Choose another session to link as a teammate.",
220
+ hint: "Use this partnership to share API summaries, what's new, errors, and relevant git changes through .mcp-xchange notes and files.",
221
+ },
222
+ },
223
+ partner: {
224
+ buttons: {
225
+ ask: "❓ Ask",
226
+ share: "📤 Share",
227
+ unlink: "🔓 Unlink",
228
+ },
229
+ actions: {
230
+ back_to_session_menu: "Back to session menu.",
231
+ open_partner_menu: "Opening partner menu.",
232
+ back_to_partner: "Back to partner.",
233
+ cancel_note_input: "Partner note input cancelled.",
234
+ no_pending_note_input: "No active partner note input.",
235
+ task_sent: "Task was sent to the selected session.",
236
+ inbox_queued: "Task was placed into the current session inbox.",
237
+ },
238
+ screen: {
239
+ title: "🤝 Partner",
240
+ active_session: "📌 Active session: {{sessionName}}",
241
+ linked_partner: "👥 Linked partner: {{partnerName}}",
242
+ no_partner: "No partner is linked yet.",
243
+ use_link_first: "Use Link in the session menu first.",
244
+ prompt_hint: "Ask for API details or share what changed.",
245
+ prompt_format: "Prompt format: first line is summary. Add a blank line and then the main message body if needed.",
246
+ default_partner: "partner",
247
+ executor: "Executor: {{label}}",
248
+ route_result: "Result route: {{source}} -> {{target}}",
249
+ route_send: "Send route: {{source}} -> {{target}}",
250
+ type: "Type: {{kind}}",
251
+ summary: "Summary: {{summary}}",
252
+ status: "Status: {{status}}",
253
+ delivered: "delivered",
254
+ queued: "queued",
255
+ current_session_handles: "The current session will prepare the result and send it itself.",
256
+ },
257
+ },
258
+ collab: {
259
+ buttons: {
260
+ tools: "🛠 Tools",
261
+ create: "➕ Create",
262
+ join: "🔑 Join",
263
+ broadcast: "📣 Broadcast",
264
+ history: "🕘 History",
265
+ delete: "🗑 Delete",
266
+ },
267
+ actions: {
268
+ gateway_only: "Projects are available only through the gateway.",
269
+ open_tools: "Opening project tools.",
270
+ open_collab: "Opening Collab.",
271
+ open_delete: "Opening project deletion.",
272
+ back_to_collab: "Back to Collab.",
273
+ back_to_tools: "Back to tools.",
274
+ back_to_session_menu: "Back to session menu.",
275
+ no_projects: "No projects yet. Create one or join an existing project.",
276
+ },
277
+ labels: {
278
+ no_projects: "🫥 No projects",
279
+ },
280
+ screen: {
281
+ title: "👥 Collab",
282
+ gateway_not_configured: "Gateway is not configured for this runtime.",
283
+ use_local_instead: "Use Local for collaboration inside one bot.",
284
+ unavailable: "Collab is unavailable for the current session.",
285
+ active_session: "📌 Active session: {{sessionName}}",
286
+ open_project: "📦 Open project: {{projectName}}",
287
+ open_project_none: "📦 Open project: not selected",
288
+ project_count: "🗂 Available projects: {{count}}",
289
+ invite_hint: "Open a project, create a new one, or join by invite code.",
290
+ tools_title: "🛠 Collab Tools",
291
+ tools_empty: "Create a project or join an existing one first.",
292
+ tools_project_count: "🗂 Collab projects: {{count}}",
293
+ tools_session_count: "👥 Unique sessions: {{count}}",
294
+ tools_broadcast: "Broadcast sends your next text message to every unique Collab session across bots without duplication.",
295
+ tools_history: "History sends a .md file with the latest 5 Collab events for the current session.",
296
+ },
297
+ },
298
+ help: {
299
+ title: "❓ TellyMCP help",
300
+ menu: "/menu - open the sessions list",
301
+ help: "/help - show this help",
302
+ how_it_works: "How it works:",
303
+ step_choose: "- choose the active session",
304
+ step_inbox: "- ordinary Telegram messages go to that session inbox",
305
+ step_nudge: "- if a terminal target is configured, the service nudges the agent automatically",
306
+ step_tools: "- the agent then reads the inbox batch through MCP tools",
307
+ },
308
+ live: {
309
+ buttons: {
310
+ fullscreen: "Fullscreen",
311
+ expand: "Expand",
312
+ default: "Default",
313
+ },
314
+ actions: {
315
+ opening: "Opening Live View.",
316
+ choose_mode: "Choose a launch mode:",
317
+ opened_info: "Live view opened.",
318
+ approval_unavailable: "This session is unavailable for approval right now.",
319
+ },
320
+ errors: {
321
+ identity_unavailable: "Telegram identity is unavailable.",
322
+ no_active_session: "No active session selected.",
323
+ webapp_disabled: "WebApp is not enabled on the server.",
324
+ public_url_missing: "WebApp public URL is not configured.",
325
+ },
326
+ screen: {
327
+ launcher_title: "🖥 Live: {{sessionName}}",
328
+ },
329
+ approval: {
330
+ request_title: "🖥 Live view request",
331
+ request_message: "Session {{sourceSessionName}} requests access to the Live view of your session.",
332
+ route: "Session: {{sourceSessionName}} -> {{targetSessionName}}",
333
+ project: "Project: {{projectName}}",
334
+ approve: "Approve",
335
+ deny: "Deny",
336
+ approved: "✅ Live access approved.",
337
+ denied: "❌ Live access denied.",
338
+ source_open: "Open Live",
339
+ result_approved: "Live view was approved for {{sourceSessionName}} -> {{targetSessionName}}.",
340
+ result_denied: "Live view was denied for {{sourceSessionName}} -> {{targetSessionName}}.",
341
+ },
342
+ },
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
+ },
354
+ startup: {
355
+ title: "✅ TellyMCP is running.",
356
+ version: "Version: {{packageVersion}}",
357
+ protocol: "Protocol: {{protocolVersion}}",
358
+ mode: "Mode: {{mode}}",
359
+ bot: "Bot: @{{botUsername}}",
360
+ sessions: "Linked sessions: {{count}}",
361
+ session_list: "Sessions: {{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: "Update available: {{currentVersion}} -> {{latestVersion}}",
368
+ update_command: "Update command: npm install -g {{packageName}}@{{latestVersion}}",
369
+ hint: "Send /menu to open the session menu.",
370
+ },
371
+ project: {
372
+ member_joined: "A participant joined project “{{projectName}}”: {{memberLabel}}.",
373
+ member_left: "A participant left project “{{projectName}}”: {{memberLabel}}.",
374
+ deleted: "Project “{{projectName}}” was deleted. Local project bindings were cleared.",
375
+ new_member: "New participant",
376
+ member: "Participant",
377
+ },
378
+ tools: {
379
+ changed: "Gateway TOOLS.md changed or the current session hash is unknown.",
380
+ session: "Session: {{sessionName}}",
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.",
382
+ },
383
+ version: {
384
+ reject: "Gateway and client are protocol-incompatible. Transport for this session is blocked.",
385
+ warn: "Gateway and client versions differ.",
386
+ session: "Session: {{sessionName}}",
387
+ client: "Client: {{packageVersion}} / protocol {{protocolVersion}}",
388
+ gateway: "Gateway: {{packageVersion}} / protocol {{protocolVersion}}",
389
+ },
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: "🛎 The agent in session {{sessionName}} may be waiting for your input.",
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
+ },
405
+ },
406
+ admin: {
407
+ auth: {
408
+ prompt: "Gateway admin access is locked. Send /auth <token> to continue.",
409
+ help: "This gateway bot requires admin authentication first. Send /auth <token>.",
410
+ required_callback: "Authenticate first with /auth <token>.",
411
+ invalid: "Admin token is invalid.",
412
+ success: "Gateway admin authentication accepted. You can continue with commands and menus.",
413
+ disabled: "Gateway admin authentication is not enabled.",
414
+ },
415
+ buttons: {
416
+ clients: "Clients",
417
+ tools: "Tools",
418
+ client_env: "Client .env",
419
+ },
420
+ actions: {
421
+ open_clients: "Opening clients.",
422
+ open_client_sessions: "Opening client sessions.",
423
+ open_client_session: "Opening session.",
424
+ open_tools: "Opening tools.",
425
+ back_to_admin: "Back to admin.",
426
+ back_to_clients: "Back to clients.",
427
+ back_to_client_sessions: "Back to client sessions.",
428
+ },
429
+ screen: {
430
+ title: "🛡 Gateway Admin",
431
+ help: "Use the admin menu to inspect gateway clients and export a client .env.",
432
+ gateway_clients: "Known clients: {{count}}",
433
+ gateway_clients_connected: "Connected via gateway WS: {{count}}",
434
+ gateway_clients_registered: "Registered active sessions: {{count}}",
435
+ gateway_clients_unavailable: "Known clients: unavailable right now.",
436
+ hint: "Choose a section below.",
437
+ },
438
+ clients: {
439
+ title: "🖥 Gateway Clients",
440
+ empty: "The gateway does not know any clients yet.",
441
+ unavailable: "The gateway client list is unavailable right now.",
442
+ connected_count: "Connected via gateway WS: {{count}}",
443
+ registered_count: "Registered active sessions: {{count}}",
444
+ legend: "Legend: 🟢 connected right now, 🗂 has registered active sessions.",
445
+ item: "• {{label}}",
446
+ bot: " Bot: {{botUsername}}",
447
+ sessions: " Sessions: {{count}}",
448
+ last_seen: " Last seen: {{value}}",
449
+ },
450
+ client_sessions: {
451
+ buttons: {
452
+ collab: "👥 Collab",
453
+ all: "🗂 All",
454
+ },
455
+ title: "🧩 Client Sessions",
456
+ client: "Client: <b>{{client}}</b>",
457
+ total: "Sessions: {{count}}",
458
+ choose: "Choose a session below.",
459
+ choose_scope: "Choose which sessions to inspect.",
460
+ scope_collab: "Scope: Collab",
461
+ scope_all: "Scope: All known sessions",
462
+ empty: "This client has no active sessions.",
463
+ empty_all: "This client has no known sessions right now.",
464
+ unavailable: "The client session list is unavailable right now.",
465
+ updated: " Updated: {{timestamp}}",
466
+ project: " Project: <b>{{projectName}}</b>",
467
+ no_client_selected: "Choose a client first.",
468
+ invalid_action: "Invalid client action.",
469
+ not_found: "The selected client is no longer available.",
470
+ back_to_scope: "⬅ Back to views",
471
+ },
472
+ client_session_detail: {
473
+ title: "🖥 Client Session",
474
+ session: "Session: <b>{{sessionName}}</b>",
475
+ project: "Project: <b>{{projectName}}</b>",
476
+ bind: "🔗 Link here",
477
+ bound: "Session linked: {{sessionName}}",
478
+ back_to_sessions: "⬅ Back to sessions",
479
+ },
480
+ tools: {
481
+ title: "🛠 Admin Tools",
482
+ client_env_help: "Export a ready-to-edit .env-client built from the current gateway URLs and runtime settings.",
483
+ client_env_caption: "Generated .env-client from current gateway settings.",
484
+ client_env_sent: "Client .env sent.",
485
+ },
486
+ },
487
+ developer: {
488
+ screen: {
489
+ title: "🛠 Tools",
490
+ linked_sessions: "🗂 Visible sessions: {{count}}",
491
+ broadcast_help: "Broadcast writes your next text message into every linked session inbox and nudges every configured terminal target.",
492
+ prune_help: "Prune all clears every Redis key under this Telegram MCP namespace.",
493
+ },
494
+ },
495
+ session_info: {
496
+ opened: "Session info opened.",
497
+ title: "ℹ Session info",
498
+ label: "📌 Label: {{value}}",
499
+ session_id: "🆔 Session ID: {{value}}",
500
+ inbox_count: "📥 Inbox count: {{count}}",
501
+ route: "🔗 Telegram route: {{value}}",
502
+ partner: "🤝 Partner: {{value}}",
503
+ terminal_target: "🖥 terminal target: {{value}}",
504
+ yes: "yes",
505
+ no: "no",
506
+ not_linked: "not linked",
507
+ not_set: "not set",
508
+ },
509
+ unpair: {
510
+ title: "⚠ Confirm route removal",
511
+ active_session: "📌 Active session: {{sessionName}}",
512
+ body_1: "This removes the active Telegram route for the selected console.",
513
+ body_2: "Session metadata and inbox records remain in Redis until you delete them separately.",
514
+ done: "Telegram route removed: {{sessionName}}",
515
+ shown: "Telegram route removed: {{sessionName}}",
516
+ },
517
+ prune: {
518
+ title: "⚠ Confirm prune",
519
+ linked_sessions: "🗂 Visible sessions here: {{count}}",
520
+ body_1: "This clears every Redis key under the telegram-mcp namespace.",
521
+ body_2: "Bindings, sessions, inbox, menu payloads, and pending requests will all be deleted.",
522
+ done: "Prune complete. Deleted {{count}} Redis keys.",
523
+ },
524
+ history: {
525
+ title: "# Collab History",
526
+ session: "Session: {{sessionName}}",
527
+ empty: "No recent Collab events were found for this session.",
528
+ project: "Project: {{projectName}}",
529
+ caption: "Collab history for {{sessionName}}",
530
+ },
531
+ broadcast: {
532
+ begin: "Broadcast to {{count}} sessions.",
533
+ title: "📣 Broadcast",
534
+ body: "Send the next text message to broadcast it to all {{count}} visible sessions.",
535
+ hint: "The message will be stored in every session inbox and the service will nudge every configured terminal target.",
536
+ cancel_hint: "Commands like /menu or /help cancel broadcast mode.",
537
+ collab_begin: "Broadcast to {{count}} collab sessions.",
538
+ collab_title: "📣 Collab Broadcast",
539
+ collab_projects: "Collab projects: {{count}}",
540
+ collab_sessions: "Unique sessions: {{count}}",
541
+ collab_body: "Send the next text message to broadcast it to all Collab sessions across bots without duplication.",
542
+ collab_hint: "Local sessions receive an inbox message, remote sessions receive a gateway delivery.",
543
+ no_linked_sessions: "No visible sessions found.",
544
+ no_collab_targets: "No Collab sessions are available for broadcast.",
545
+ no_projects_first: "Create a project or join an existing one first.",
546
+ mode_not_active: "Broadcast mode is not active.",
547
+ cancelled: "Broadcast cancelled.",
548
+ cancelled_no_sessions: "Broadcast was cancelled because no visible sessions were found.",
549
+ completed_linked: "Broadcast completed for {{count}} visible sessions.",
550
+ completed_collab: "Broadcast completed for {{count}} Collab sessions.",
551
+ completed_collab_local: "Local inbox: {{count}}",
552
+ completed_collab_remote: "Remote deliveries: {{count}}",
553
+ completed_collab_total: "Total sessions: {{count}}",
554
+ },
555
+ project: {
556
+ not_found: "Project not found.",
557
+ left_callback: "Left the project.",
558
+ left_screen: "You left the selected project.",
559
+ deleted_callback: "Project deleted.",
560
+ deleted_screen: "Project “{{projectName}}” was deleted. Participants were unbound and project state was cleared.",
561
+ delete_only_owner: "Only the owner can delete a project.",
562
+ delete_menu_title: "🗑 Delete Project",
563
+ active_session: "📌 Active session: {{sessionName}}",
564
+ total_count: "🗂 Collab projects: {{count}}",
565
+ owner_count: "👑 Projects where you are owner: {{count}}",
566
+ delete_choose: "Choose a project for complete deletion.",
567
+ delete_body: "Participants will be unbound, project sessions removed, and the project record deleted.",
568
+ delete_owner_hint: "Only the owner can delete a project.",
569
+ created: "Project created: {{projectName}}\nInvite: {{inviteToken}}",
570
+ joined: "Joined project: {{projectName}}",
571
+ opened: "Opened project: {{projectName}}",
572
+ invalid_action: "Invalid project action.",
573
+ invalid_member_action: "Invalid project member action.",
574
+ invalid_member_payload: "Invalid project member data.",
575
+ stale_member_payload: "Project member data is invalid or outdated.",
576
+ invalid_live_payload: "Invalid Live View data.",
577
+ stale_live_payload: "Live View data is invalid or outdated.",
578
+ no_telegram_user: "Unable to determine Telegram user.",
579
+ request_live_sent: "Live request sent for approval.",
580
+ loading_members: "Loading members.",
581
+ opening_members: "Opening project members.",
582
+ opening_session: "Opening session.",
583
+ opening_files: "Opening files.",
584
+ create_prompt_title: "📦 Create project",
585
+ create_prompt_body: "Send the project name in your next message.",
586
+ join_prompt_title: "🔑 Join project",
587
+ join_prompt_body: "Send the project invite token in your next message.",
588
+ prompt_cancel: "Commands like /menu or /help cancel this mode.",
589
+ start_create: "Creating project.",
590
+ start_join: "Joining project.",
591
+ data_missing: "Project data was not found.",
592
+ data_stale: "Project data is outdated or invalid.",
593
+ no_active_project: "No active project.",
594
+ left_current: "Project left.",
595
+ left_current_screen: "You left the current project.",
596
+ members_title: "👥 Members of {{projectName}}",
597
+ current_session: "Session: {{sessionName}}",
598
+ other_sessions: "Other sessions: {{count}}",
599
+ choose_file_target: "Choose who should receive this file.",
600
+ choose_member_action: "Choose a session to ask, share with, reply to, or send a file to.",
601
+ no_other_active: "There are no other active sessions in this project yet.",
602
+ leave: "🚪 Leave",
603
+ back_to_projects: "⬅ To projects",
604
+ ask: "❓ Ask",
605
+ share_button: "📤 Share",
606
+ back_to_members: "⬅ To members",
607
+ back_to_session: "⬅ To session",
608
+ file_title: "📎 Choose file",
609
+ file_project: "Project: {{projectName}}",
610
+ file_recipient: "Recipient: {{label}}",
611
+ file_choose: "Choose a file to send.",
612
+ file_none: "There are no uploaded files in this session.",
613
+ invalid_approval: "Invalid Live View approval.",
614
+ invalid_approval_data: "Invalid approval data.",
615
+ approval_stale: "The Live View request has expired.",
616
+ },
617
+ handoff: {
618
+ no_pending: "No pending file handoff prompt.",
619
+ cancelled: "File handoff cancelled.",
620
+ delivered_agent: "File delivered to the agent.",
621
+ queued_partner: "File was queued for delivery to the partner.",
622
+ project: "Project: {{projectName}}",
623
+ recipient: "Recipient: {{label}}",
624
+ session: "Session: {{label}}",
625
+ status: "Status: {{status}}",
626
+ share: "Share: {{shareId}}",
627
+ delivered: "delivered",
628
+ queued: "queued",
629
+ prompt_title: "🤝 Send to participant",
630
+ route: "Session: {{sourceSessionName}} -> {{targetSessionName}}",
631
+ file: "File: {{fileName}}",
632
+ prompt_body: "Send the file description or instructions in your next message.",
633
+ prompt_hint: "This text will be attached to the handoff.",
634
+ choose_title: "📎 Choose file",
635
+ choose_recipient: "Recipient: {{label}}",
636
+ choose_local: "Choose a file to send to the local partner.",
637
+ choose_project: "Choose a file to send.",
638
+ no_files: "No uploaded files are available in this session.",
639
+ cancel: "Cancel",
640
+ uploaded_to_session: "File sent to session {{label}}.",
641
+ uploaded_to_partner: "File sent to partner {{label}}.",
642
+ delivered_one: "File delivered to session {{label}}.",
643
+ delivered_many: "Files delivered to session {{label}}: {{count}}.",
644
+ },
645
+ system: {
646
+ sessions_menu_unavailable: "Sessions menu is temporarily unavailable. Try /menu again.",
647
+ gateway_relay_inbox_sent: "Message routed to session {{sessionName}} through the gateway.",
648
+ gateway_relay_inbox_failed: "Failed to route the message to the selected gateway session.",
649
+ error_prefix: "Error: {{message}}",
650
+ terminal_recreated_hint: "This usually means the pane/window/session was recreated.",
651
+ },
652
+ };