@deadragdoll/tellymcp 0.0.1

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 (124) hide show
  1. package/.env.example.client +93 -0
  2. package/.env.example.gateway +120 -0
  3. package/CHANGELOG.md +155 -0
  4. package/LICENSE +21 -0
  5. package/README-ru.md +338 -0
  6. package/README.md +1262 -0
  7. package/STANDALONE-ru.md +266 -0
  8. package/STANDALONE.md +266 -0
  9. package/TOOLS.md +1296 -0
  10. package/config/templates/env.both.template +83 -0
  11. package/config/templates/env.client.template +60 -0
  12. package/config/templates/env.gateway.template +82 -0
  13. package/dist/cli.js +636 -0
  14. package/dist/index.js +17 -0
  15. package/dist/lib/logfeed/store.js +52 -0
  16. package/dist/lib/middlewares/tracer.js +172 -0
  17. package/dist/lib/mixins/db.js +267 -0
  18. package/dist/lib/mixins/logfeed.js +34 -0
  19. package/dist/lib/mixins/session.errors.js +142 -0
  20. package/dist/lib/moleculer.js +2 -0
  21. package/dist/lib/trace.js +147 -0
  22. package/dist/lib/traceContext.js +116 -0
  23. package/dist/moleculer.config.js +274 -0
  24. package/dist/services/features/telegram-mcp/approval.service.js +33 -0
  25. package/dist/services/features/telegram-mcp/browser.service.js +42 -0
  26. package/dist/services/features/telegram-mcp/collaboration.service.js +53 -0
  27. package/dist/services/features/telegram-mcp/ensuredb.service.js +337 -0
  28. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +378 -0
  29. package/dist/services/features/telegram-mcp/gateway-loopback.js +10 -0
  30. package/dist/services/features/telegram-mcp/gateway-rmq.service.js +294 -0
  31. package/dist/services/features/telegram-mcp/gateway-socket.service.js +1463 -0
  32. package/dist/services/features/telegram-mcp/gateway.service.js +1141 -0
  33. package/dist/services/features/telegram-mcp/inbox.service.js +33 -0
  34. package/dist/services/features/telegram-mcp/mcp-http.service.js +76 -0
  35. package/dist/services/features/telegram-mcp/mcp-server.service.js +127 -0
  36. package/dist/services/features/telegram-mcp/notify.service.js +33 -0
  37. package/dist/services/features/telegram-mcp/pair.service.js +33 -0
  38. package/dist/services/features/telegram-mcp/runtime.service.js +36 -0
  39. package/dist/services/features/telegram-mcp/session-context.service.js +33 -0
  40. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +103 -0
  41. package/dist/services/features/telegram-mcp/src/app/config/env.js +317 -0
  42. package/dist/services/features/telegram-mcp/src/app/http.js +774 -0
  43. package/dist/services/features/telegram-mcp/src/app/index.js +2 -0
  44. package/dist/services/features/telegram-mcp/src/app/providers/mcp/server.js +13 -0
  45. package/dist/services/features/telegram-mcp/src/app/providers/redis/client.js +18 -0
  46. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +740 -0
  47. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +267 -0
  48. package/dist/services/features/telegram-mcp/src/app/webapp/relay.js +69 -0
  49. package/dist/services/features/telegram-mcp/src/app/webapp/tmux.js +9 -0
  50. package/dist/services/features/telegram-mcp/src/entities/auth/model/types.js +2 -0
  51. package/dist/services/features/telegram-mcp/src/entities/browser/model/types.js +2 -0
  52. package/dist/services/features/telegram-mcp/src/entities/collaboration/model/types.js +2 -0
  53. package/dist/services/features/telegram-mcp/src/entities/inbox/model/types.js +2 -0
  54. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +545 -0
  55. package/dist/services/features/telegram-mcp/src/entities/request/model/types.js +2 -0
  56. package/dist/services/features/telegram-mcp/src/entities/session/model/types.js +2 -0
  57. package/dist/services/features/telegram-mcp/src/features/ask-user/model/askUserTelegram.js +33 -0
  58. package/dist/services/features/telegram-mcp/src/features/browser/model/browserClearLogsTool.js +28 -0
  59. package/dist/services/features/telegram-mcp/src/features/browser/model/browserClickTool.js +28 -0
  60. package/dist/services/features/telegram-mcp/src/features/browser/model/browserCloseTool.js +28 -0
  61. package/dist/services/features/telegram-mcp/src/features/browser/model/browserComputedStyleTool.js +28 -0
  62. package/dist/services/features/telegram-mcp/src/features/browser/model/browserConsoleTool.js +28 -0
  63. package/dist/services/features/telegram-mcp/src/features/browser/model/browserDomTool.js +28 -0
  64. package/dist/services/features/telegram-mcp/src/features/browser/model/browserErrorsTool.js +28 -0
  65. package/dist/services/features/telegram-mcp/src/features/browser/model/browserFillTool.js +28 -0
  66. package/dist/services/features/telegram-mcp/src/features/browser/model/browserNetworkFailuresTool.js +28 -0
  67. package/dist/services/features/telegram-mcp/src/features/browser/model/browserOpenTool.js +33 -0
  68. package/dist/services/features/telegram-mcp/src/features/browser/model/browserPressTool.js +28 -0
  69. package/dist/services/features/telegram-mcp/src/features/browser/model/browserReloadTool.js +28 -0
  70. package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +28 -0
  71. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +689 -0
  72. package/dist/services/features/telegram-mcp/src/features/browser/model/browserWaitForTool.js +28 -0
  73. package/dist/services/features/telegram-mcp/src/features/browser/model/browserWaitForUrlTool.js +28 -0
  74. package/dist/services/features/telegram-mcp/src/features/collaboration/model/backend.js +2 -0
  75. package/dist/services/features/telegram-mcp/src/features/collaboration/model/collaborationService.js +26 -0
  76. package/dist/services/features/telegram-mcp/src/features/collaboration/model/localCollaborationBackend.js +390 -0
  77. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +102 -0
  78. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileTool.js +33 -0
  79. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerNoteTool.js +33 -0
  80. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +69 -0
  81. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +657 -0
  82. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayReplyResolution.js +17 -0
  83. package/dist/services/features/telegram-mcp/src/features/inbox/model/deleteTelegramInboxMessageTool.js +33 -0
  84. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxCountTool.js +33 -0
  85. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxTool.js +33 -0
  86. package/dist/services/features/telegram-mcp/src/features/inbox/model/inboxService.js +77 -0
  87. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +93 -0
  88. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyTelegramTool.js +33 -0
  89. package/dist/services/features/telegram-mcp/src/features/pair-session/model/clearSessionPairingTool.js +33 -0
  90. package/dist/services/features/telegram-mcp/src/features/pair-session/model/createSessionPairCodeTool.js +33 -0
  91. package/dist/services/features/telegram-mcp/src/features/pair-session/model/generatePairCode.js +202 -0
  92. package/dist/services/features/telegram-mcp/src/features/session-context/model/clearSessionContextTool.js +33 -0
  93. package/dist/services/features/telegram-mcp/src/features/session-context/model/getSessionContextTool.js +33 -0
  94. package/dist/services/features/telegram-mcp/src/features/session-context/model/getTmuxTargetTool.js +33 -0
  95. package/dist/services/features/telegram-mcp/src/features/session-context/model/renameSessionTool.js +33 -0
  96. package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +409 -0
  97. package/dist/services/features/telegram-mcp/src/features/session-context/model/setSessionContextTool.js +33 -0
  98. package/dist/services/features/telegram-mcp/src/features/session-context/model/setTmuxTargetTool.js +33 -0
  99. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownService.js +123 -0
  100. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownTool.js +33 -0
  101. package/dist/services/features/telegram-mcp/src/processes/human-approval/model/orchestrator.js +243 -0
  102. package/dist/services/features/telegram-mcp/src/shared/api/storage/contract.js +2 -0
  103. package/dist/services/features/telegram-mcp/src/shared/api/tool-registry/registry.js +8 -0
  104. package/dist/services/features/telegram-mcp/src/shared/api/tool-registry/types.js +2 -0
  105. package/dist/services/features/telegram-mcp/src/shared/api/transport/contract.js +2 -0
  106. package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +86 -0
  107. package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +436 -0
  108. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/collabSemantics.js +21 -0
  109. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/collabUi.js +87 -0
  110. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/messageFormat.js +60 -0
  111. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/proxyFetch.js +46 -0
  112. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +6534 -0
  113. package/dist/services/features/telegram-mcp/src/shared/integrations/tmux/client.js +280 -0
  114. package/dist/services/features/telegram-mcp/src/shared/lib/ids/ids.js +34 -0
  115. package/dist/services/features/telegram-mcp/src/shared/lib/logger/logger.js +68 -0
  116. package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +223 -0
  117. package/dist/services/features/telegram-mcp/src/shared/lib/redact-secrets/redactSecrets.js +22 -0
  118. package/dist/services/features/telegram-mcp/src/shared/lib/truncate/truncate.js +12 -0
  119. package/dist/services/features/telegram-mcp/src/shared/lib/version/versionHandshake.js +124 -0
  120. package/dist/services/features/telegram-mcp/src/shared/types/common.js +2 -0
  121. package/dist/services/features/telegram-mcp/standalone-http.service.js +113 -0
  122. package/dist/services/features/telegram-mcp/tools-sync.service.js +33 -0
  123. package/package.json +110 -0
  124. package/scripts/postinstall.js +60 -0
package/README-ru.md ADDED
@@ -0,0 +1,338 @@
1
+ # TellyMCP
2
+
3
+ [English](README.md) | [Русский](README-ru.md)
4
+
5
+ [![npm version](https://img.shields.io/npm/v/%40deadragdoll%2Ftellymcp)](https://www.npmjs.com/package/@deadragdoll/tellymcp)
6
+ [![npm downloads](https://img.shields.io/npm/dm/%40deadragdoll%2Ftellymcp)](https://www.npmjs.com/package/@deadragdoll/tellymcp)
7
+ [![node >= 24](https://img.shields.io/badge/node-%3E%3D24-339933)](https://nodejs.org/)
8
+ [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
9
+
10
+ TellyMCP — это Telegram Human-in-the-Loop MCP server для coding agents.
11
+
12
+ Он позволяет агенту:
13
+
14
+ - задавать человеку уточняющие вопросы через Telegram
15
+ - получать несвязанные входящие сообщения позже через inbox
16
+ - привязывать несколько agent-сессий
17
+ - работать с локальными и удалёнными партнёрскими сессиями
18
+ - открывать Live tmux view внутри Telegram Mini App
19
+ - обмениваться note, скриншотами и файлами через `.mcp-xchange`
20
+
21
+ ## Prerequisites
22
+
23
+ - Node.js 24+
24
+ - `tmux`
25
+ - Redis
26
+ - Telegram bot token от BotFather
27
+ - для `gateway` / `both`: Postgres
28
+ - опционально для durable fanout на шлюзе: RabbitMQ
29
+
30
+ ## `tmux` настоятельно рекомендуется
31
+
32
+ TellyMCP лучше всего работает, когда сам агент запущен внутри `tmux`.
33
+
34
+ Без `tmux` сервис всё равно может работать, но полноценный интерактивный режим будет неполным:
35
+
36
+ - не будет `Live View`
37
+ - не будет tmux `nudge`
38
+ - не будет прямого управления tmux из Telegram Mini App
39
+
40
+ Типичный старт:
41
+
42
+ ```bash
43
+ tmux new -s backend
44
+ ```
45
+
46
+ Позже можно просто подключиться:
47
+
48
+ ```bash
49
+ tmux attach -t backend
50
+ ```
51
+
52
+ Почему имя tmux-сессии важно:
53
+
54
+ - по нему проще различать агентов
55
+ - оно участвует в tmux-related UI и диагностике
56
+ - с ним проще понимать, какую сессию ты открываешь в Telegram и `Live`
57
+
58
+ Лучше использовать короткие осмысленные имена:
59
+
60
+ - `backend`
61
+ - `frontend`
62
+ - `review`
63
+ - `ops`
64
+
65
+ Если агентов несколько, лучше запускать каждого в своей tmux-сессии или pane и привязывать отдельно.
66
+
67
+ ## Быстрый старт
68
+
69
+ ### 1. Standalone client без шлюза
70
+
71
+ Это самый простой режим:
72
+
73
+ - без shared gateway
74
+ - без Postgres
75
+ - без RabbitMQ
76
+
77
+ Установка:
78
+
79
+ ```bash
80
+ npm install -g @deadragdoll/tellymcp
81
+ ```
82
+
83
+ Создай клиентский конфиг:
84
+
85
+ ```bash
86
+ tellymcp init client
87
+ ```
88
+
89
+ В `.env` заполни минимум:
90
+
91
+ - `TELEGRAM_BOT_TOKEN`
92
+ - `TELEGRAM_BOT_USERNAME`
93
+ - `REDIS_HOST`
94
+ - `MCP_HTTP_BEARER_TOKEN`
95
+
96
+ Проверь конфиг:
97
+
98
+ ```bash
99
+ tellymcp doctor --env .env
100
+ ```
101
+
102
+ Запусти сервис:
103
+
104
+ ```bash
105
+ tellymcp run --env .env
106
+ ```
107
+
108
+ Локальный MCP endpoint в `client`-режиме:
109
+
110
+ - `http://127.0.0.1:8787/mcp`
111
+
112
+ Чтобы получить готовый JSON snippet для агента:
113
+
114
+ ```bash
115
+ tellymcp mcp --help
116
+ ```
117
+
118
+ ### 2. Gateway или combined `both`
119
+
120
+ Используй этот режим, если нужен:
121
+
122
+ - `Collab` между машинами
123
+ - проекты между разными ботами
124
+ - gateway-relayed Live View
125
+ - persistent gateway-side состояние по проектам и доставке
126
+
127
+ Создай конфиг:
128
+
129
+ ```bash
130
+ tellymcp init gateway
131
+ ```
132
+
133
+ или
134
+
135
+ ```bash
136
+ tellymcp init both
137
+ ```
138
+
139
+ В `.env` настроить:
140
+
141
+ - `DISTRIBUTED_MODE=gateway|both`
142
+ - `PORT`
143
+ - `ROOT_PREFIX=/api`
144
+ - `TELEGRAM_BOT_TOKEN`
145
+ - `REDIS_*`
146
+ - `DB_*`
147
+ - `WEBAPP_PUBLIC_URL`
148
+ - `GATEWAY_PUBLIC_URL`
149
+ - `GATEWAY_WS_URL`
150
+ - при необходимости `RMQ_*`
151
+
152
+ Ожидаемый публичный ingress:
153
+
154
+ - `/api/mcp`
155
+ - `/api/webapp`
156
+ - `/api/gateway`
157
+ - `/api/healthz`
158
+
159
+ Проверка:
160
+
161
+ ```bash
162
+ tellymcp doctor --env .env
163
+ ```
164
+
165
+ Запуск:
166
+
167
+ ```bash
168
+ tellymcp run --env .env
169
+ ```
170
+
171
+ Типовой публичный MCP endpoint:
172
+
173
+ - `https://your-host.example/api/mcp`
174
+
175
+ ## Как начать работу с ботом изнутри агента
176
+
177
+ После подключения MCP можно просто написать агенту обычной фразой, что нужно привязаться к Telegram.
178
+
179
+ Типовые фразы, которые агент должен понимать:
180
+
181
+ - `привяжись к Telegram`
182
+ - `подключись к Telegram`
183
+ - `зарегистрируй эту сессию в Telegram`
184
+ - `свяжи эту сессию с ботом`
185
+ - `создай код привязки к Telegram`
186
+ - `дай код для pairing с Telegram`
187
+
188
+ Ожидаемый flow:
189
+
190
+ 1. Агент вызывает `create_session_pair_code`.
191
+ 2. Возвращается короткий код и, если возможно, deep link.
192
+ 3. Ты открываешь Telegram и отправляешь боту `/start <code>` или `/link <code>`.
193
+ 4. После успешной привязки можно открыть `/menu`.
194
+
195
+ Если хочешь написать совсем явно, используй так:
196
+
197
+ ```text
198
+ Привяжись к Telegram и дай мне код для pairing.
199
+ ```
200
+
201
+ Если агент работает внутри `tmux`, ему желательно передать `cwd` и tmux-атрибуты уже на этапе pairing, чтобы `Live` и `nudge` заработали сразу.
202
+
203
+ ## Telegram setup
204
+
205
+ 1. Открой BotFather.
206
+ 2. Создай бота через `/newbot`.
207
+ 3. Сохрани токен.
208
+ 4. Укажи `TELEGRAM_BOT_USERNAME`, если хочешь deep-link подсказки для pairing.
209
+
210
+ ## MCP helper
211
+
212
+ TellyMCP сам не прописывает себя в конфиг агента.
213
+
214
+ Команда:
215
+
216
+ ```bash
217
+ tellymcp mcp --help
218
+ ```
219
+
220
+ печатает готовые snippets для:
221
+
222
+ - локального standalone клиента
223
+ - общего gateway endpoint
224
+ - варианта с bearer token
225
+
226
+ ## Doctor
227
+
228
+ `doctor` mode-aware.
229
+
230
+ В `client` режиме проверяет:
231
+
232
+ - `tmux`
233
+ - `.env`
234
+ - Redis
235
+ - локальный MCP bind
236
+ - внешний `gateway healthz`, если задан `GATEWAY_PUBLIC_URL`
237
+ - `GATEWAY_WS_URL`
238
+ - `WEBAPP_PUBLIC_URL`
239
+
240
+ В `gateway` / `both` режиме проверяет:
241
+
242
+ - `tmux`
243
+ - `.env`
244
+ - Redis
245
+ - локальный `healthz`
246
+ - публичный `healthz`
247
+ - публичный `ws`
248
+ - публичный `webapp`
249
+ - Postgres
250
+ - RabbitMQ, если настроен
251
+
252
+ ## Ключевые переменные
253
+
254
+ Общие:
255
+
256
+ - `TELEGRAM_BOT_TOKEN`
257
+ - `TELEGRAM_BOT_USERNAME`
258
+ - `REDIS_HOST`
259
+ - `REDIS_PORT`
260
+ - `REDIS_DB`
261
+ - `MODE=queue|reject`
262
+ - `PAIR_CODE_TTL_SECONDS`
263
+ - `MCP_HTTP_HOST`
264
+ - `MCP_HTTP_PORT`
265
+ - `MCP_HTTP_PATH`
266
+ - `MCP_HTTP_BEARER_TOKEN`
267
+ - `TMUX_SOCKET_PATH`
268
+ - `TMUX_NUDGE_ENABLED`
269
+ - `TMUX_NUDGE_DEBOUNCE_SECONDS`
270
+ - `TMUX_NUDGE_COOLDOWN_SECONDS`
271
+ - `WEBAPP_ENABLED`
272
+ - `WEBAPP_BASE_PATH`
273
+ - `WEBAPP_LAUNCH_MODE=default|expand|fullscreen`
274
+ - `MCP_XCHANGE_DIR`
275
+ - `PROXY_USE=http|socks5`
276
+ - `HTTP_PROXY`
277
+ - `SOCKS5_PROXY`
278
+
279
+ Только client:
280
+
281
+ - `DISTRIBUTED_MODE=client`
282
+ - `GATEWAY_PUBLIC_URL`
283
+ - `GATEWAY_WS_URL`
284
+ - `GATEWAY_WS_PATH`
285
+ - `GATEWAY_AUTH_TOKEN`
286
+
287
+ Gateway / both:
288
+
289
+ - `DISTRIBUTED_MODE=gateway|both`
290
+ - `PORT`
291
+ - `ROOT_PREFIX=/api`
292
+ - `DB_HOST`
293
+ - `DB_PORT`
294
+ - `DB_USER`
295
+ - `DB_PASSWORD`
296
+ - `DB_NAME`
297
+ - `RMQ_HOST`
298
+ - `RMQ_PORT`
299
+ - `RMQ_USER`
300
+ - `RMQ_PASSWORD`
301
+ - `RMQ_VHOST`
302
+ - `RMQ_EXCHANGE`
303
+
304
+ Готовые шаблоны:
305
+
306
+ - `.env.example.client`
307
+ - `.env.example.gateway`
308
+ - `tellymcp init client|gateway|both`
309
+
310
+ ## Что умеет
311
+
312
+ Базовый поток такой:
313
+
314
+ 1. Агент создаёт или обновляет session context.
315
+ 2. Агент вызывает `create_session_pair_code`.
316
+ 3. Человек делает `/start <code>` или `/link <code>` в Telegram.
317
+ 4. После pairing бот открывает меню сессий, inbox, storage, local/collab и live view.
318
+ 5. Агент вызывает `ask_user_telegram` для связанной `session_id`.
319
+ 6. Ответ пользователя возвращается как MCP tool output.
320
+ 7. Несвязанные входящие Telegram-сообщения остаются в inbox этой сессии.
321
+ 8. Файлы и note попадают в `.mcp-xchange`.
322
+
323
+ ## Полезные команды
324
+
325
+ ```bash
326
+ tellymcp help
327
+ tellymcp doctor --env .env
328
+ tellymcp mcp --help
329
+ tellymcp run --env .env
330
+ ```
331
+
332
+ ## Для разработки
333
+
334
+ См.:
335
+
336
+ - [README.md](README.md)
337
+ - [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)
338
+ - [TOOLS.md](TOOLS.md)