@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
package/README-ru.md CHANGED
@@ -1,521 +1,342 @@
1
- # TellyMCP
1
+ <div align="center">
2
2
 
3
- [English](README.md) | [Русский](README-ru.md) | [Standalone Guide](STANDALONE.md) | [Standalone RU](STANDALONE-ru.md) | [Screenshots](screenshots/README.md) | [Gallery](screenshots/GALLERY.md) | [Release Notes](VERSION.md)
3
+ # TellyMCP
4
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)
5
+ **Telegram control plane для MCP-подключённых coding agents**
9
6
 
10
- TellyMCP это self-hosted Telegram control plane для coding agents.
7
+ [English](./README.md) · [Русский](./README-ru.md) · [Standalone](./docs/STANDALONE.md) · [Standalone RU](./docs/STANDALONE-ru.md)
11
8
 
12
- Он привязывает реальные agent-сессии к Telegram, делает их доступными с телефона и даёт им работать вместе между локальными и удалёнными машинами.
9
+ [![npm version](https://img.shields.io/npm/v/@deadragdoll/tellymcp.svg)](https://www.npmjs.com/package/@deadragdoll/tellymcp)
10
+ [![node](https://img.shields.io/badge/node-%3E%3D24-339933.svg)](https://nodejs.org/)
11
+ [![license](https://img.shields.io/npm/l/@deadragdoll/tellymcp.svg)](./LICENSE)
12
+ [![gateway--first](https://img.shields.io/badge/runtime-gateway--first-1f6feb.svg)](./README-ru.md#текущая-модель)
13
+ [![telegram webhook](https://img.shields.io/badge/telegram-webhook%20%7C%20polling-26A5E4.svg)](./README-ru.md#webhook)
13
14
 
14
- Он не завязан на одного вендора или один coding assistant. Если агент умеет работать с MCP server, он может использовать TellyMCP.
15
+ </div>
15
16
 
16
- ## Зачем он нужен
17
+ `@deadragdoll/tellymcp` Telegram control plane для MCP-подключённых coding agents.
17
18
 
18
- Coding agents полезны ровно до того момента, пока они не остаются одни в терминале:
19
+ Текущая модель gateway-first:
19
20
 
20
- - им нужно уточнение, пока тебя нет за компьютером
21
- - им нужен approval перед рискованным действием
22
- - им нужно передать скриншот, файл или note между сессиями
23
- - им нужно быстро подключить человека или другого агента, не ломая общий workflow
21
+ - один gateway держит Telegram-бота, web app, проекты и live registry консолей
22
+ - один или несколько agent-процессов подключаются к этому gateway
23
+ - каждая запущенная консоль агента отдельный routable target
24
+ - пользователь работает через gateway-бота, а не через pairing отдельных сессий
24
25
 
25
- TellyMCP даёт каждой сессии мобильную панель управления и collaboration layer:
26
+ ## Что умеет
26
27
 
27
- - `Live` tmux view и лёгкое управление из Telegram
28
- - session-scoped inbox и уведомления
29
- - workspace-aware handoff для файлов и note
30
- - локальную и удалённую коллаборацию между сессиями
31
- - поддержку mixed agent setups, если они умеют говорить по MCP
28
+ - даёт MCP tools для human-in-the-loop через Telegram
29
+ - позволяет одной консоли агента ставить задачу другой консоли
30
+ - хранит structured xchange records в `.mcp-xchange`
31
+ - поддерживает browser automation через Playwright
32
+ - отдаёт Telegram Mini App / Live View с gateway
33
+ - поддерживает polling и webhook на gateway
34
+ - поставляет встроенный Codex plugin со skills под типовые workflow
32
35
 
33
- ## Ключевые идеи продукта
36
+ ## Текущая модель
34
37
 
35
- - `Live` tmux view и управление внутри Telegram Mini App
36
- - `Collab`-сценарии для локальных и удалённых agent-сессий
37
- - `.mcp-xchange` как workspace-level handoff шина для note, файлов и скриншотов
38
- - MCP-native pairing сессий и session-scoped tools
39
- - optional gateway mode для multi-machine и multi-bot проектов
38
+ Схема:
40
39
 
41
- ## Human-in-the-loop — это только один слой системы
40
+ ```text
41
+ Telegram user
42
+ |
43
+ Telegram bot + WebApp
44
+ |
45
+ Gateway
46
+ |
47
+ +-- Agent console A
48
+ +-- Agent console B
49
+ +-- Agent console C
50
+ ```
42
51
 
43
- Telegram HITL здесь тоже есть, но он не исчерпывает продукт:
52
+ Следствия:
44
53
 
45
- - задавать человеку уточняющие вопросы через Telegram
46
- - получать несвязанные входящие сообщения позже через inbox
47
- - уведомлять человека о прогрессе, blockers и approvals
54
+ - обычный flow больше не использует pairing
55
+ - `/menu` в gateway-боте показывает live-консоли напрямую
56
+ - межсессионная маршрутизация идёт по canonical `session_id = client_uuid:local_session_id`
57
+ - несвязанные задачи читаются через structured xchange records, а не через старые inbox APIs
48
58
 
49
- ## Что отличает TellyMCP от простого Telegram bot bridge
59
+ ## Основные поверхности
50
60
 
51
- - он завязан на сессии, а не только на чат
52
- - он понимает локальные и удалённые collaboration targets
53
- - у него есть live terminal surface, а не только обмен сообщениями
54
- - он передаёт файлы через workspace-aware exchange paths, а не просто через ad hoc upload
55
- - он может работать как standalone node или как gateway-backed control plane
61
+ Для человека:
56
62
 
57
- ## Типовые сценарии
63
+ - `telegram_message`
64
+ - `notify_telegram`
65
+ - `browser_screenshot(send_to_telegram=true)`
58
66
 
59
- - держать долгоживущего агента доступным с телефона
60
- - запускать рядом разных агентов, если каждый умеет подключаться по MCP
61
- - подруливать tmux-сессией без ноутбука
62
- - маршрутизировать работу между `frontend`, `backend`, `review` и другими локальными сессиями
63
- - работать с удалёнными сессиями через gateway-backed project
64
- - передавать note, скриншоты и реальные файлы через `.mcp-xchange`
65
- - проверять локальный веб-интерфейс через `browser_*` tools и отправлять результат обратно в Telegram
67
+ Для agent-to-agent:
66
68
 
67
- ## Группы инструментов
69
+ - `partner_note`
70
+ - `send_partner_note`
71
+ - `send_partner_file`
72
+ - `list_gateway_sessions`
68
73
 
69
- - pairing и session context
70
- - Telegram ask/notify/inbox
71
- - `Live` tmux control
72
- - browser inspection и screenshots
73
- - partner notes и partner files
74
- - tools sync и version checks
74
+ Для браузера:
75
75
 
76
- Важно для `Share`:
76
+ - `browser_open`
77
+ - `browser_click`
78
+ - `browser_fill`
79
+ - `browser_press`
80
+ - `browser_wait_for`
81
+ - `browser_screenshot`
77
82
 
78
- - текущая сессия должна выполнить работу сама
79
- - target-сессии отправляется только результат
80
- - исходное поручение не должно пересылаться дальше как новая задача
83
+ Синхронизация инструкций:
81
84
 
82
- Полный список MCP tools лучше держать ниже по README и в самом MCP server, а не на первом экране.
85
+ - `refresh_tools_markdown`
86
+ - `.mcpsession.json` хранит startup identity и последний известный tools hash
83
87
 
84
- ## Prerequisites
88
+ ## Требования
85
89
 
86
- - Node.js 24+
87
- - `tmux`
90
+ - Node.js `>= 24`
88
91
  - Redis
89
- - Telegram bot token от BotFather
90
- - для `gateway` / `both`: Postgres
91
- - опционально для durable fanout на шлюзе: RabbitMQ
92
-
93
- ## `tmux` настоятельно рекомендуется
94
-
95
- TellyMCP лучше всего работает, когда сам агент запущен внутри `tmux`.
92
+ - PostgreSQL для gateway mode
93
+ - опционально RabbitMQ для durable gateway fanout
94
+ - Playwright browser binaries, если нужны browser tools
96
95
 
97
- Без `tmux` сервис всё равно может работать, но полноценный интерактивный режим будет неполным:
98
-
99
- - не будет `Live View`
100
- - не будет tmux `nudge`
101
- - не будет прямого управления tmux из Telegram Mini App
102
-
103
- Типичный старт:
96
+ ## Установка
104
97
 
105
98
  ```bash
106
- tmux new -s backend
99
+ npm install -g @deadragdoll/tellymcp
107
100
  ```
108
101
 
109
- Позже можно просто подключиться:
102
+ Если нужны browser tools:
110
103
 
111
104
  ```bash
112
- tmux attach -t backend
105
+ tellymcp browser install
113
106
  ```
114
107
 
115
- Почему имя tmux-сессии важно:
116
-
117
- - по нему проще различать агентов
118
- - оно участвует в tmux-related UI и диагностике
119
- - с ним проще понимать, какую сессию ты открываешь в Telegram и `Live`
120
-
121
- Лучше использовать короткие осмысленные имена:
122
-
123
- - `backend`
124
- - `frontend`
125
- - `review`
126
- - `ops`
127
-
128
- Если агентов несколько, лучше запускать каждого в своей tmux-сессии или pane и привязывать отдельно.
108
+ Если используешь Codex:
129
109
 
130
- Если tmux pane пересоздан и его `pane_id` изменился, TellyMCP теперь пытается автоматически восстановить актуальный target по сохранённым tmux session/window/pane hints.
131
-
132
- Если авто-восстановление не удалось, в Telegram придёт operational warning, а не только запись в backend log.
110
+ ```bash
111
+ tellymcp codex-plugin install
112
+ ```
133
113
 
134
114
  ## Быстрый старт
135
115
 
136
- ### 1. Standalone client без шлюза
137
-
138
- Это самый простой режим:
116
+ ### 1. Gateway
139
117
 
140
- - без shared gateway
141
- - без Postgres
142
- - без RabbitMQ
143
-
144
- Установка:
118
+ Создай workspace и env:
145
119
 
146
120
  ```bash
147
- npm install -g @deadragdoll/tellymcp
121
+ mkdir -p ~/telly-gateway
122
+ cd ~/telly-gateway
123
+ tellymcp init gateway
148
124
  ```
149
125
 
150
- Создай клиентский конфиг:
126
+ Или возьми sample:
151
127
 
152
- ```bash
153
- tellymcp init client
154
- ```
128
+ - [.env.example.gateway](./.env.example.gateway)
155
129
 
156
- В `.env` заполни минимум:
130
+ Минимально важные значения:
157
131
 
158
132
  - `TELEGRAM_BOT_TOKEN`
159
- - `TELEGRAM_BOT_USERNAME`
160
133
  - `REDIS_HOST`
161
- - `MCP_HTTP_BEARER_TOKEN`
162
-
163
- Проверь конфиг:
164
-
165
- ```bash
166
- tellymcp doctor --env .env
167
- ```
134
+ - `DB_HOST`
135
+ - `DB_USER`
136
+ - `DB_PASSWORD`
137
+ - `DB_NAME`
138
+ - `GATEWAY_PUBLIC_URL`
139
+ - `GATEWAY_WS_URL`
140
+ - `GATEWAY_TOKEN`
168
141
 
169
- Запусти сервис:
142
+ Запуск:
170
143
 
171
144
  ```bash
172
145
  tellymcp run --env .env
173
146
  ```
174
147
 
175
- Локальный MCP endpoint в `client`-режиме:
176
-
177
- - `http://127.0.0.1:8787/mcp`
178
-
179
- Чтобы получить готовый JSON snippet для агента:
180
-
181
- ```bash
182
- tellymcp mcp --help
183
- ```
184
-
185
- ### 2. Gateway или combined `both`
148
+ ### 2. Agent
186
149
 
187
- Используй этот режим, если нужен:
188
-
189
- - `Collab` между машинами
190
- - проекты между разными ботами
191
- - gateway-relayed Live View
192
- - persistent gateway-side состояние по проектам и доставке
193
-
194
- Создай конфиг:
150
+ Для каждой консоли лучше отдельный workspace:
195
151
 
196
152
  ```bash
197
- tellymcp init gateway
153
+ mkdir -p ~/agent-a
154
+ cd ~/agent-a
155
+ tellymcp init client
198
156
  ```
199
157
 
200
- или
158
+ Или используй sample:
201
159
 
202
- ```bash
203
- tellymcp init both
204
- ```
160
+ - [.env.example.client](./.env.example.client)
205
161
 
206
- В `.env` настроить:
162
+ Минимально важные значения:
207
163
 
208
- - `DISTRIBUTED_MODE=gateway|both`
209
- - `PORT`
210
- - `ROOT_PREFIX=/api`
211
- - `TELEGRAM_BOT_TOKEN`
212
- - `REDIS_*`
213
- - `DB_*`
214
- - `WEBAPP_PUBLIC_URL`
215
164
  - `GATEWAY_PUBLIC_URL`
216
165
  - `GATEWAY_WS_URL`
217
- - при необходимости `RMQ_*`
166
+ - `GATEWAY_TOKEN`
167
+ - `GATEWAY_USER_UUID`, если консоль должна быть видна конкретному владельцу в gateway-боте
218
168
 
219
- Ожидаемый публичный ingress:
169
+ Рекомендуется:
220
170
 
221
- - `/api/mcp`
222
- - `/api/webapp`
223
- - `/api/gateway`
224
- - `/api/healthz`
171
+ - по умолчанию используется встроенный PTY terminal runtime
172
+ - на первом запуске явно задать `TELLYMCP_SESSION_ID` и `TELLYMCP_SESSION_LABEL`
225
173
 
226
- Проверка:
174
+ Первый запуск:
227
175
 
228
176
  ```bash
229
- tellymcp doctor --env .env
230
- ```
231
-
232
- Запуск:
233
-
234
- ```bash
235
- tellymcp run --env .env
177
+ tellymcp run --env .env -s NEW
236
178
  ```
237
179
 
238
- Типовой публичный MCP endpoint:
180
+ После первого запуска `.mcpsession.json` хранит:
239
181
 
240
- - `https://your-host.example/api/mcp`
182
+ - `local_session_id`
183
+ - `session_label`
184
+ - `env_file`
241
185
 
242
- ## Mini App / Live
186
+ Поэтому дальше в том же каталоге обычно достаточно:
243
187
 
244
- Если `WEBAPP_ENABLED=true`, в меню сессии появляется `🖥 Live`.
188
+ ```bash
189
+ tellymcp run
190
+ ```
245
191
 
246
- Mini App:
192
+ ## Webhook
247
193
 
248
- - обслуживается этим же Node service по `WEBAPP_BASE_PATH`
249
- - в `client`-режиме тоже может открываться через общий gateway domain
250
- - показывает видимую область tmux pane и отправляет ограниченный набор control actions
251
- - валидирует Telegram `initData` на сервере
252
- - умеет открываться в режимах:
253
- - `default`
254
- - `expand`
255
- - `fullscreen` с fallback на `expand`
256
- - после успешного bootstrap удаляет временное launcher-сообщение
257
- - автоматически восстанавливается после короткого рестарта шлюза:
258
- - краткий `502/503` переживается обычным polling
259
- - если in-process WebApp session на шлюзе была потеряна и приходит `401/403`, Mini App сама делает повторный bootstrap
260
- - в типовом restart-case переоткрывать `Live` не нужно
194
+ Gateway умеет работать через Telegram webhook.
261
195
 
262
- ## Docker: только для инфраструктуры или для `gateway`-only
196
+ Если nginx уже проксирует весь `/api/` на standalone HTTP listener gateway, отдельный `location` для webhook не обязателен. Route такой:
263
197
 
264
- Docker больше не является основным способом запуска TellyMCP, но один container path поддерживается:
198
+ - `/api/telegram/webhook`
265
199
 
266
- - запуск только `gateway`-ноды в контейнере
200
+ Нужные env:
267
201
 
268
- Это вариант именно для чистого control-plane узла:
202
+ ```env
203
+ TELEGRAM_WEBHOOK_ENABLED=true
204
+ TELEGRAM_WEBHOOK_PATH=/telegram/webhook
205
+ TELEGRAM_WEBHOOK_PUBLIC_URL=https://your-domain.example/api/telegram/webhook
206
+ TELEGRAM_WEBHOOK_SECRET=change_me_webhook_secret
207
+ ```
269
208
 
270
- - без локальных agent sessions
271
- - без локального `tmux`
272
- - не для `client`
273
- - не для `both`
209
+ Когда webhook mode включён:
274
210
 
275
- Плюс `docker-compose.yml` по-прежнему может поднимать локальную инфраструктуру:
211
+ - gateway вызывает `setWebhook(...)` на старте
212
+ - polling не запускается
213
+ - секрет проверяется через `x-telegram-bot-api-secret-token`
276
214
 
277
- - `redis` для всех режимов
278
- - `postgres` для `gateway` / `both`
279
- - `rabbitmq` только если нужен durable fanout на шлюзе
215
+ ## MCP
280
216
 
281
- Только Redis, для `standalone` или `client`:
217
+ ### Local HTTP
282
218
 
283
- ```bash
284
- docker compose up -d redis
285
- ```
286
-
287
- Redis + Postgres, для `gateway` или `both`:
219
+ В client mode локальный MCP endpoint обычно:
288
220
 
289
- ```bash
290
- docker compose --profile gateway up -d
221
+ ```text
222
+ http://127.0.0.1:8787/mcp
291
223
  ```
292
224
 
293
- Добавить RabbitMQ при необходимости:
225
+ Helper:
294
226
 
295
227
  ```bash
296
- docker compose --profile gateway --profile rmq up -d
228
+ tellymcp mcp --url http://127.0.0.1:8787/mcp
297
229
  ```
298
230
 
299
- Полный gateway stack в Docker:
300
-
301
- 1. Скопировать пример:
231
+ Для Codex и похожих агентов используй MCP HTTP endpoint, который поднимает `tellymcp run`.
302
232
 
303
- ```bash
304
- cp .env.example.gateway .env-gateway
305
- ```
233
+ ## Codex Plugin
306
234
 
307
- 2. Отредактировать `.env-gateway` и задать минимум:
235
+ Пакет включает локальный Codex plugin со skills для:
308
236
 
309
- - `TELEGRAM_BOT_TOKEN`
310
- - `TELEGRAM_BOT_USERNAME`
311
- - `WEBAPP_PUBLIC_URL`
312
- - `GATEWAY_PUBLIC_URL`
313
- - `GATEWAY_WS_URL`
314
- - `MCP_HTTP_BEARER_TOKEN`
237
+ - ответов человеку в Telegram
238
+ - `partner_note`
239
+ - browser screenshot задач
240
+ - artifact-return flow
315
241
 
316
- 3. Запустить:
242
+ Команды:
317
243
 
318
244
  ```bash
319
- docker compose up -d
245
+ tellymcp codex-plugin status
246
+ tellymcp codex-plugin install
320
247
  ```
321
248
 
322
- Это поднимет:
249
+ Installer:
323
250
 
324
- - `redis`
325
- - `postgres`
326
- - `tellymcp-gateway`
251
+ - копирует bundled plugin в managed local Codex path
252
+ - обновляет personal marketplace manifest
253
+ - ставит или обновляет plugin, если найден Codex CLI
327
254
 
328
- Внутри Docker compose сам переопределяет:
255
+ ## Browser Workflow
329
256
 
330
- - `MCP_HTTP_HOST=0.0.0.0`
331
- - `REDIS_HOST=redis`
332
- - `DB_HOST=postgres`
257
+ Browser tools используют Playwright Chromium.
333
258
 
334
- Ожидаемые endpoint'ы:
259
+ Предпочтительный путь:
335
260
 
336
- - `http://127.0.0.1:8080/api/healthz`
337
- - `http://127.0.0.1:8080/api/mcp`
338
- - `http://127.0.0.1:8080/api/webapp`
339
- - `http://127.0.0.1:8080/api/gateway`
261
+ 1. `browser_open`
262
+ 2. `browser_screenshot`
263
+ 3. дальше либо:
264
+ - `send_to_telegram=true` для ответа человеку
265
+ - `send_partner_file` для возврата артефакта другой консоли
340
266
 
341
- Остановить всё:
267
+ Если browser runtime не установлен:
342
268
 
343
269
  ```bash
344
- docker compose down
270
+ tellymcp browser install
345
271
  ```
346
272
 
347
- Сам TellyMCP при этом запускается напрямую на хосте:
273
+ Не подменяй browser workflow ad hoc shell-командами с Playwright, кроме случаев, когда ты отлаживаешь сам browser runtime.
348
274
 
349
- ```bash
350
- tellymcp run --env .env
351
- ```
352
-
353
- Для `client` и `both` по-прежнему рекомендуется именно хостовый запуск.
275
+ ## Collaboration
354
276
 
355
- ## Как начать работу с ботом изнутри агента
277
+ Проекты:
356
278
 
357
- После подключения MCP можно просто написать агенту обычной фразой, что нужно привязаться к Telegram.
279
+ - live presence консолей идёт из gateway live registry
280
+ - membership проекта хранится отдельно от live presence
281
+ - один client может иметь несколько live консолей одновременно
282
+ - console participation в проекте хранится отдельно
358
283
 
359
- Типовые фразы, которые агент должен понимать:
284
+ Ожидаемое поведение агента:
360
285
 
361
- - `привяжись к Telegram`
362
- - `подключись к Telegram`
363
- - `зарегистрируй эту сессию в Telegram`
364
- - `свяжи эту сессию с ботом`
365
- - `создай код привязки к Telegram`
366
- - `дай код для pairing с Telegram`
286
+ - target резолвится через `list_gateway_sessions`
287
+ - входящая работа читается через `list_xchange_records` и `get_xchange_record`
288
+ - реальные файлы возвращаются через `send_partner_file`
289
+ - `mark_xchange_record_read` вызывается только после успешного outbound reply
367
290
 
368
- Ожидаемый flow:
291
+ ## Файлы конфигурации
369
292
 
370
- 1. Агент вызывает `create_session_pair_code`.
371
- 2. Возвращается короткий код и, если возможно, deep link.
372
- 3. Ты открываешь Telegram и отправляешь боту `/start <code>` или `/link <code>`.
373
- 4. После успешной привязки можно открыть `/menu`.
293
+ Канонические стартовые точки:
374
294
 
375
- Если хочешь написать совсем явно, используй так:
376
-
377
- ```text
378
- Привяжись к Telegram и дай мне код для pairing.
379
- ```
295
+ - [.env.example.gateway](./.env.example.gateway)
296
+ - [.env.example.client](./.env.example.client)
380
297
 
381
- Если агент работает внутри `tmux`, ему желательно передать `cwd` и tmux-атрибуты уже на этапе pairing, чтобы `Live` и `nudge` заработали сразу.
298
+ Bundled templates:
382
299
 
383
- ## Telegram setup
300
+ - [config/templates/env.gateway.template](./config/templates/env.gateway.template)
301
+ - [config/templates/env.client.template](./config/templates/env.client.template)
302
+ - [config/templates/env.both.template](./config/templates/env.both.template)
384
303
 
385
- 1. Открой BotFather.
386
- 2. Создай бота через `/newbot`.
387
- 3. Сохрани токен.
388
- 4. Укажи `TELEGRAM_BOT_USERNAME`, если хочешь deep-link подсказки для pairing.
304
+ Samples уже вычищены под текущий runtime:
389
305
 
390
- ## MCP helper
306
+ - убраны старые inbox-only настройки
307
+ - убраны obsolete pairing-oriented тексты
308
+ - убраны неиспользуемые секреты вроде `SESSION_SECRET`
309
+ - убран неиспользуемый `APP_NAME`
391
310
 
392
- TellyMCP сам не прописывает себя в конфиг агента.
311
+ ## Операционные команды
393
312
 
394
- Команда:
313
+ Проверка окружения:
395
314
 
396
315
  ```bash
397
- tellymcp mcp --help
316
+ tellymcp doctor --env .env
398
317
  ```
399
318
 
400
- печатает готовые snippets для:
401
-
402
- - локального standalone клиента
403
- - общего gateway endpoint
404
- - варианта с bearer token
405
-
406
- ## Doctor
407
-
408
- `doctor` mode-aware.
319
+ Разрушительная очистка local+gateway state:
409
320
 
410
- В `client` режиме проверяет:
411
-
412
- - `tmux`
413
- - `.env`
414
- - Redis
415
- - локальный MCP bind
416
- - внешний `gateway healthz`, если задан `GATEWAY_PUBLIC_URL`
417
- - `GATEWAY_WS_URL`
418
- - `WEBAPP_PUBLIC_URL`
419
-
420
- В `gateway` / `both` режиме проверяет:
421
-
422
- - `tmux`
423
- - `.env`
424
- - Redis
425
- - локальный `healthz`
426
- - публичный `healthz`
427
- - публичный `ws`
428
- - публичный `webapp`
429
- - Postgres
430
- - RabbitMQ, если настроен
431
-
432
- ## Ключевые переменные
433
-
434
- Общие:
435
-
436
- - `TELEGRAM_BOT_TOKEN`
437
- - `TELEGRAM_BOT_USERNAME`
438
- - `REDIS_HOST`
439
- - `REDIS_PORT`
440
- - `REDIS_DB`
441
- - `MODE=queue|reject`
442
- - `PAIR_CODE_TTL_SECONDS`
443
- - `MCP_HTTP_HOST`
444
- - `MCP_HTTP_PORT`
445
- - `MCP_HTTP_PATH`
446
- - `MCP_HTTP_BEARER_TOKEN`
447
- - `TMUX_SOCKET_PATH`
448
- - `TMUX_NUDGE_ENABLED`
449
- - `TMUX_NUDGE_DEBOUNCE_SECONDS`
450
- - `TMUX_NUDGE_COOLDOWN_SECONDS`
451
- - `WEBAPP_ENABLED`
452
- - `WEBAPP_BASE_PATH`
453
- - `WEBAPP_LAUNCH_MODE=default|expand|fullscreen`
454
- - `MCP_XCHANGE_DIR`
455
- - `PROXY_USE=http|socks5`
456
- - `HTTP_PROXY`
457
- - `SOCKS5_PROXY`
458
- - `LOG_LEVEL`
459
- - `LOG_FILE_ENABLED`
460
- - `LOG_FILE_PATH`
461
-
462
- Только client:
463
-
464
- - `DISTRIBUTED_MODE=client`
465
- - `GATEWAY_PUBLIC_URL`
466
- - `GATEWAY_WS_URL`
467
- - `GATEWAY_WS_PATH`
468
- - `GATEWAY_AUTH_TOKEN`
469
-
470
- Gateway / both:
471
-
472
- - `DISTRIBUTED_MODE=gateway|both`
473
- - `PORT`
474
- - `ROOT_PREFIX=/api`
475
- - `DB_HOST`
476
- - `DB_PORT`
477
- - `DB_USER`
478
- - `DB_PASSWORD`
479
- - `DB_NAME`
480
- - `RMQ_HOST`
481
- - `RMQ_PORT`
482
- - `RMQ_USER`
483
- - `RMQ_PASSWORD`
484
- - `RMQ_VHOST`
485
- - `RMQ_EXCHANGE`
486
-
487
- Готовые шаблоны:
488
-
489
- - `.env.example.client`
490
- - `.env.example.gateway`
491
- - `tellymcp init client|gateway|both`
492
-
493
- ## Что умеет
494
-
495
- Базовый поток такой:
321
+ ```bash
322
+ tellymcp system-prune --env .env --yes
323
+ ```
496
324
 
497
- 1. Агент создаёт или обновляет session context.
498
- 2. Агент вызывает `create_session_pair_code`.
499
- 3. Человек делает `/start <code>` или `/link <code>` в Telegram.
500
- 4. После pairing бот открывает меню сессий, inbox, storage, local/collab и live view.
501
- 5. Агент вызывает `ask_user_telegram` для связанной `session_id`.
502
- 6. Ответ пользователя возвращается как MCP tool output.
503
- 7. Несвязанные входящие Telegram-сообщения остаются в inbox этой сессии.
504
- 8. Файлы и note попадают в `.mcp-xchange`.
325
+ ## Карта документации
505
326
 
506
- ## Полезные команды
327
+ - [README.md](./README.md)
328
+ - [STANDALONE.md](./docs/STANDALONE.md)
329
+ - [STANDALONE-ru.md](./docs/STANDALONE-ru.md)
330
+ - [TOOLS.md](./TOOLS.md)
331
+ - [screenshots/README.md](./screenshots/README.md)
507
332
 
508
- ```bash
509
- tellymcp help
510
- tellymcp doctor --env .env
511
- tellymcp mcp --help
512
- tellymcp run --env .env
513
- ```
333
+ ## Статус
514
334
 
515
- ## Для разработки
335
+ Этот README описывает текущую gateway-first модель.
516
336
 
517
- См.:
337
+ Legacy concepts, которые не стоит использовать в новых setup:
518
338
 
519
- - [README.md](README.md)
520
- - [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)
521
- - [TOOLS.md](TOOLS.md)
339
+ - pairing codes
340
+ - session inbox APIs
341
+ - `Local` partner menu
342
+ - linked-session flows вне `partner_note` / project collaboration