@deadragdoll/tellymcp 0.0.13 → 0.0.15

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 (86) hide show
  1. package/.env.example.client +23 -39
  2. package/.env.example.gateway +52 -61
  3. package/CHANGELOG.md +57 -0
  4. package/README-ru.md +80 -6
  5. package/README.md +80 -6
  6. package/TOOLS.md +219 -10
  7. package/config/templates/env.both.template +19 -7
  8. package/config/templates/env.client.template +9 -19
  9. package/config/templates/env.gateway.template +19 -31
  10. package/dist/cli.js +252 -47
  11. package/dist/configureServer.js +966 -0
  12. package/dist/envMigration.js +316 -0
  13. package/dist/moleculer.config.js +1 -3
  14. package/dist/services/features/telegram-mcp/approval.service.js +1 -1
  15. package/dist/services/features/telegram-mcp/browser.service.js +18 -0
  16. package/dist/services/features/telegram-mcp/collaboration.service.js +2 -2
  17. package/dist/services/features/telegram-mcp/ensuredb.service.js +1 -1
  18. package/dist/services/features/telegram-mcp/file-content.service.js +94 -0
  19. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +5 -1
  20. package/dist/services/features/telegram-mcp/gateway-socket.service.js +43 -11
  21. package/dist/services/features/telegram-mcp/gateway.service.js +1 -1
  22. package/dist/services/features/telegram-mcp/mcp-http.service.js +1 -0
  23. package/dist/services/features/telegram-mcp/mcp-server.service.js +20 -0
  24. package/dist/services/features/telegram-mcp/session-context.service.js +25 -1
  25. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +79 -67
  26. package/dist/services/features/telegram-mcp/src/app/config/env.js +129 -38
  27. package/dist/services/features/telegram-mcp/src/app/config/environmentContract.js +66 -0
  28. package/dist/services/features/telegram-mcp/src/app/http.js +139 -99
  29. package/dist/services/features/telegram-mcp/src/app/oauthFacade.js +642 -0
  30. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +151 -170
  31. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +96 -99
  32. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +88 -19
  33. package/dist/services/features/telegram-mcp/src/features/browser/model/browserAttachActiveTabTool.js +28 -0
  34. package/dist/services/features/telegram-mcp/src/features/browser/model/browserAttachTabTool.js +28 -0
  35. package/dist/services/features/telegram-mcp/src/features/browser/model/browserDetachTabTool.js +28 -0
  36. package/dist/services/features/telegram-mcp/src/features/browser/model/browserListAttachedInstancesTool.js +1 -1
  37. package/dist/services/features/telegram-mcp/src/features/browser/model/browserListTabsTool.js +1 -1
  38. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +412 -29
  39. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/browserRecordingBundle.js +37 -3
  40. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachRegistry.js +7 -6
  41. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachServer.js +214 -37
  42. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/types.js +186 -0
  43. package/dist/services/features/telegram-mcp/src/features/collaboration/model/collaborationService.js +2 -0
  44. package/dist/services/features/telegram-mcp/src/features/collaboration/model/gatewaySessionsService.js +5 -5
  45. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +6 -3
  46. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +5 -2
  47. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +4 -4
  48. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +33 -36
  49. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/remoteConsoleActionClient.js +4 -3
  50. package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileListTool.js +33 -0
  51. package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileService.js +327 -0
  52. package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileTool.js +81 -0
  53. package/dist/services/features/telegram-mcp/src/features/file-content/model/temporaryFileLinkStore.js +307 -0
  54. package/dist/services/features/telegram-mcp/src/features/file-content/model/workspaceFilePolicy.js +115 -0
  55. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +9 -5
  56. package/dist/services/features/telegram-mcp/src/features/session-context/model/getRuntimeDiagnosticsTool.js +30 -0
  57. package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +169 -7
  58. package/dist/services/features/telegram-mcp/src/shared/integrations/memory/processLocalStateStore.js +260 -0
  59. package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +1 -1
  60. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +4 -1
  61. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConsoleRegistry.js +2 -2
  62. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +6 -3
  63. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMessageFlow.js +1 -1
  64. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectState.js +2 -2
  65. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +29 -6
  66. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +100 -2
  67. package/dist/services/features/telegram-mcp/src/shared/lib/bodyLimits.js +63 -0
  68. package/dist/services/features/telegram-mcp/src/shared/lib/gatewayAuth.js +13 -0
  69. package/dist/services/features/telegram-mcp/src/shared/lib/gatewayScope.js +5 -5
  70. package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +10 -0
  71. package/dist/services/features/telegram-mcp/src/shared/lib/time/localTimestamp.js +21 -0
  72. package/docs/CHAT_CONNECTOR.md +134 -0
  73. package/docs/STANDALONE-ru.md +41 -3
  74. package/docs/STANDALONE.md +41 -3
  75. package/package.json +5 -3
  76. package/packages/chrome-attach-extension/dist/background.js +572 -163
  77. package/packages/chrome-attach-extension/dist/manifest.json +2 -1
  78. package/packages/chrome-attach-extension/dist/options.js +15 -2
  79. package/packages/chrome-attach-extension/dist/recorder-content.js +14 -1
  80. package/packages/chrome-attach-extension/dist/recorder-page.js +34 -18
  81. package/packages/firefox-attach-extension/dist/background.js +413 -33
  82. package/packages/firefox-attach-extension/dist/manifest.json +0 -12
  83. package/packages/firefox-attach-extension/dist/options.js +14 -1
  84. package/packages/firefox-attach-extension/dist/recorder-content.js +14 -1
  85. package/packages/firefox-attach-extension/dist/recorder-page.js +34 -18
  86. package/scripts/postinstall.js +33 -1
@@ -1,21 +1,14 @@
1
- # TellyMCP client example
1
+ # TellyMCP agent-console example. See docs/ENVIRONMENT.md for the complete contract.
2
2
 
3
- # Optional project label shown in prompts.
3
+ # Workspace identity. NEW generates a stable value on first run.
4
4
  # PROJECT_NAME=
5
+ TELLYMCP_SESSION_ID=NEW
6
+ TELLYMCP_SESSION_LABEL=NEW
5
7
 
6
- # Optional explicit session identity for the first run.
7
- # TELLYMCP_SESSION_ID=NEW
8
- # TELLYMCP_SESSION_LABEL=NEW
9
-
10
- REDIS_HOST=127.0.0.1
11
- REDIS_PORT=6379
12
- REDIS_DB=1
13
- # REDIS_USERNAME=
14
- # REDIS_PASSWORD=
15
-
16
- MODE=reject
17
- PAIR_CODE_TTL_SECONDS=300
8
+ # Local runtime state is process-local; Redis is not used by clients.
9
+ TELEGRAM_REQUEST_MODE=reject
18
10
 
11
+ # Local MCP endpoint exposed to the agent.
19
12
  MCP_HTTP_HOST=127.0.0.1
20
13
  MCP_HTTP_PORT=8787
21
14
  MCP_HTTP_PATH=/mcp
@@ -23,25 +16,26 @@ MCP_HTTP_PATH=/mcp
23
16
  MCP_HTTP_ENABLE_DEBUG_ROUTES=false
24
17
  MCP_HTTP_ENABLE_PRUNE_ROUTE=false
25
18
 
19
+ # Gateway connection.
26
20
  DISTRIBUTED_MODE=client
27
21
  GATEWAY_PUBLIC_URL=https://your-domain.example/api/gateway
28
22
  GATEWAY_WS_URL=wss://your-domain.example/api/gateway/ws
29
- GATEWAY_WS_PATH=/api/gateway/ws
30
- GATEWAY_TOKEN=change_me_gateway_token
23
+ # GATEWAY_WS_PATH=/api/gateway/ws
24
+ # Optional data-scope key. Must match the gateway when used.
25
+ GATEWAY_SCOPE_TOKEN=change_me_scope_token
26
+ # Optional owner binding for Telegram visibility.
31
27
  GATEWAY_USER_UUID=
32
- # GATEWAY_AUTH_TOKEN=
28
+ # Required shared HTTP/WebSocket transport credential.
29
+ GATEWAY_AUTH_TOKEN=change_me_transport_token
33
30
 
31
+ # Built-in PTY runtime.
34
32
  TERMINAL_SHELL=bash
35
33
  TERMINAL_COLS=120
36
34
  TERMINAL_ROWS=40
37
35
  TERMINAL_SCROLLBACK_LINES=4000
38
-
39
36
  TERMINAL_NUDGE_ENABLED=true
40
37
  TERMINAL_NUDGE_DEBOUNCE_SECONDS=10
41
38
  TERMINAL_NUDGE_COOLDOWN_SECONDS=30
42
- TERMINAL_NUDGE_MESSAGE=получи newest telegram_message через list_xchange_records/get_xchange_record, выполни запрос и ответь человеку через notify_telegram; не останавливайся на анализе
43
- TERMINAL_PARTNER_NUDGE_MESSAGE=получи newest partner_note через list_xchange_records/get_xchange_record, выполни задачу в текущей консоли и обязательно отправь результат через send_partner_note или send_partner_file; только потом mark_xchange_record_read
44
- TERMINAL_PARTNER_REPLY_NUDGE_MESSAGE=получи newest partner_note через list_xchange_records/get_xchange_record; если newest note имеет kind=reply или не требует ответа, не отправляй новый send_partner_note/send_partner_file без явного нового запроса. Если этот reply завершает задачу от человека, сразу отправь финальный результат в Telegram через notify_telegram или send_file_to_telegram; только потом mark_xchange_record_read
45
39
  TERMINAL_CAPTURE_MODE=visible
46
40
  TERMINAL_CAPTURE_LINES=300
47
41
  TERMINAL_PROMPT_SCAN_ENABLED=true
@@ -49,18 +43,8 @@ TERMINAL_PROMPT_SCAN_INTERVAL_SECONDS=15
49
43
  TERMINAL_PROMPT_SCAN_COOLDOWN_SECONDS=120
50
44
  TERMINAL_PROMPT_SCAN_STRATEGY=strict
51
45
  TERMINAL_PROMPT_SCAN_MIN_SCORE=5
52
- WEBAPP_ENABLED=true
53
- WEBAPP_BASE_PATH=/webapp
54
- WEBAPP_PUBLIC_URL=https://your-domain.example/api/webapp
55
- WEBAPP_INITDATA_TTL_SECONDS=300
56
- WEBAPP_SESSION_TTL_SECONDS=900
57
- WEBAPP_LAUNCH_MODE=fullscreen
58
- WEBAPP_VISIBLE_SCREENS=10
59
- WEBAPP_POLL_INTERVAL_MS=2000
60
- WEBAPP_ACTION_COOLDOWN_MS=150
61
-
62
- MCP_XCHANGE_DIR=.mcp-xchange
63
46
 
47
+ # Browser automation and optional attach bridge.
64
48
  BROWSER_ENABLED=true
65
49
  BROWSER_HEADLESS=false
66
50
  BROWSER_DEVTOOLS=false
@@ -71,17 +55,17 @@ BROWSER_WAIT_UNTIL=load
71
55
  # BROWSER_EXECUTABLE_PATH=
72
56
  # BROWSER_CHANNEL=chrome
73
57
  BROWSER_SLOW_MO_MS=0
58
+ # BROWSER_ATTACH_ENABLED=true
59
+ # BROWSER_ATTACH_WS_HOST=127.0.0.1
60
+ # BROWSER_ATTACH_WS_PORT=9999
61
+ # BROWSER_ATTACH_WS_PATH=/browser-attach/ws
74
62
 
63
+ MCP_XCHANGE_DIR=.mcp-xchange
75
64
  NAMESPACE=mcp
76
65
  NODE_ID=agent
77
-
78
- # Optional outbound proxy.
79
- # PROXY_USE=http
80
- # HTTP_PROXY=http://user:pass@proxy.example:3128
81
- # SOCKS5_PROXY=socks5h://user:pass@proxy.example:1080
82
-
83
66
  LOG_LEVEL=info
84
67
  LOG_FILE_ENABLED=false
85
68
  LOG_FILE_PATH=.tellymcp/log.jsonl
86
69
  # LOG_STDERR_LEVEL=error
87
- ENABLE_LOGFEED=0
70
+ # LOG_FILE_LEVEL=info
71
+ LOGFEED_ENABLED=false
@@ -1,7 +1,35 @@
1
- # TellyMCP gateway example
1
+ # TellyMCP gateway example. See docs/ENVIRONMENT.md for the complete contract.
2
2
 
3
+ # Required gateway identity and infrastructure.
3
4
  TELEGRAM_BOT_TOKEN=
4
5
  TELEGRAM_BOT_USERNAME=
6
+ REDIS_HOST=127.0.0.1
7
+ REDIS_PORT=6379
8
+ REDIS_DB=1
9
+ # REDIS_USERNAME=
10
+ # REDIS_PASSWORD=
11
+ DB_HOST=127.0.0.1
12
+ DB_PORT=5432
13
+ DB_USER=user
14
+ DB_PASSWORD=password
15
+ DB_NAME=mydb
16
+ DB_SCHEMA=mcp
17
+
18
+ # Public gateway transport.
19
+ DISTRIBUTED_MODE=gateway
20
+ GATEWAY_PUBLIC_URL=https://your-domain.example/api/gateway
21
+ GATEWAY_WS_URL=wss://your-domain.example/api/gateway/ws
22
+ # Optional data-scope key. This is not an authentication credential.
23
+ GATEWAY_SCOPE_TOKEN=change_me_scope_token
24
+ # Required shared HTTP/WebSocket transport credential.
25
+ GATEWAY_AUTH_TOKEN=change_me_transport_token
26
+ ROOT_PREFIX=/api
27
+ PORT=8080
28
+ MCP_HTTP_HOST=0.0.0.0
29
+ MCP_HTTP_PATH=/mcp
30
+
31
+ # Request handling and operator access.
32
+ TELEGRAM_REQUEST_MODE=reject
5
33
  # ADMIN_TOKEN=
6
34
  # DEBUG_LANGUAGE=ru
7
35
 
@@ -13,40 +41,24 @@ TELEGRAM_BOT_USERNAME=
13
41
  # TELEGRAM_WEBHOOK_TRACE=false
14
42
  # TELEGRAM_WEBHOOK_DROP_PENDING_UPDATES=false
15
43
 
16
- REDIS_HOST=127.0.0.1
17
- REDIS_PORT=6379
18
- REDIS_DB=1
19
- # REDIS_USERNAME=
20
- # REDIS_PASSWORD=
21
-
22
- MODE=reject
23
- PAIR_CODE_TTL_SECONDS=300
24
-
25
- MCP_HTTP_HOST=127.0.0.1
26
- MCP_HTTP_PORT=8787
27
- MCP_HTTP_PATH=/mcp
44
+ # Optional static bearer auth for internal MCP clients.
28
45
  # MCP_HTTP_BEARER_TOKEN=
29
46
  MCP_HTTP_ENABLE_DEBUG_ROUTES=false
30
47
  MCP_HTTP_ENABLE_PRUNE_ROUTE=false
31
48
 
32
- DISTRIBUTED_MODE=gateway
33
- GATEWAY_PUBLIC_URL=https://your-domain.example/api/gateway
34
- GATEWAY_WS_URL=wss://your-domain.example/api/gateway/ws
35
- GATEWAY_WS_PATH=/api/gateway/ws
36
- GATEWAY_TOKEN=change_me_gateway_token
37
- # GATEWAY_AUTH_TOKEN=
38
-
39
- ROOT_PREFIX=/api
40
- PORT=8080
41
- NAMESPACE=mcp
42
- NODE_ID=GWAY
43
-
44
- DB_HOST=127.0.0.1
45
- DB_PORT=5432
46
- DB_USER=
47
- DB_PASSWORD=
48
- DB_NAME=
49
- DB_SCHEME=mcp
49
+ # ChatGPT / Claude OAuth facade. Setting any OAuth value enables it.
50
+ # TELLYMCP_PUBLIC_URL=https://your-domain.example/api
51
+ # TELLYMCP_OAUTH_ISSUER=https://your-domain.example/api
52
+ # TELLYMCP_OAUTH_AUDIENCE=https://your-domain.example/api
53
+ # TELLYMCP_MAGIC_TOKEN=change_me_private_connector_token
54
+ # TELLYMCP_MAGIC_TOKEN_HASH=sha256:<hex>
55
+ # TELLYMCP_OAUTH_CLIENT_ID=tellymcp
56
+ # TELLYMCP_OAUTH_CLIENT_SECRET=
57
+ # TELLYMCP_ALLOWED_REDIRECT_URIS=https://chatgpt.com/connector/oauth/...,https://claude.ai/api/mcp/auth_callback
58
+ # TELLYMCP_OAUTH_PRIVATE_KEY_PEM="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
59
+ # TELLYMCP_AUTH_CODE_TTL_SECONDS=300
60
+ # TELLYMCP_OAUTH_SCOPES=tellymcp:read tellymcp:write
61
+ # TELLYMCP_OAUTH_KEY_ID=tellymcp-oauth
50
62
 
51
63
  # Optional RabbitMQ fanout.
52
64
  # RMQ_HOST=127.0.0.1
@@ -56,54 +68,33 @@ DB_SCHEME=mcp
56
68
  # RMQ_VHOST=/
57
69
  # RMQ_EXCHANGE=telegram_mcp.gateway
58
70
 
71
+ # Telegram Mini App.
59
72
  WEBAPP_ENABLED=true
60
73
  WEBAPP_BASE_PATH=/webapp
61
74
  WEBAPP_PUBLIC_URL=https://your-domain.example/api/webapp
62
75
  WEBAPP_INITDATA_TTL_SECONDS=300
63
76
  WEBAPP_SESSION_TTL_SECONDS=900
64
77
  WEBAPP_LAUNCH_MODE=fullscreen
65
- WEBAPP_VISIBLE_SCREENS=10
66
- WEBAPP_POLL_INTERVAL_MS=2000
78
+ WEBAPP_VISIBLE_SCREENS=2
67
79
  WEBAPP_ACTION_COOLDOWN_MS=150
68
80
 
69
- MCP_XCHANGE_DIR=.mcp-xchange
70
-
71
- TERMINAL_SHELL=bash
72
- TERMINAL_COLS=120
73
- TERMINAL_ROWS=40
74
- TERMINAL_SCROLLBACK_LINES=4000
75
-
76
- TERMINAL_NUDGE_ENABLED=true
77
- TERMINAL_NUDGE_DEBOUNCE_SECONDS=10
78
- TERMINAL_NUDGE_COOLDOWN_SECONDS=30
79
- TERMINAL_NUDGE_MESSAGE=получи newest telegram_message через list_xchange_records/get_xchange_record, выполни запрос и ответь человеку через notify_telegram; не останавливайся на анализе
80
- TERMINAL_PARTNER_NUDGE_MESSAGE=получи newest partner_note через list_xchange_records/get_xchange_record, выполни задачу в текущей консоли и обязательно отправь результат через send_partner_note или send_partner_file; только потом mark_xchange_record_read
81
- TERMINAL_PARTNER_REPLY_NUDGE_MESSAGE=получи newest partner_note через list_xchange_records/get_xchange_record; если newest note имеет kind=reply или не требует ответа, не отправляй новый send_partner_note/send_partner_file без явного нового запроса. Если этот reply завершает задачу от человека, сразу отправь финальный результат в Telegram через notify_telegram или send_file_to_telegram; только потом mark_xchange_record_read
82
- TERMINAL_CAPTURE_MODE=visible
83
- TERMINAL_CAPTURE_LINES=300
81
+ # Gateway-side terminal prompt detection.
84
82
  TERMINAL_PROMPT_SCAN_ENABLED=false
85
83
  TERMINAL_PROMPT_SCAN_INTERVAL_SECONDS=15
86
84
  TERMINAL_PROMPT_SCAN_COOLDOWN_SECONDS=120
87
85
  TERMINAL_PROMPT_SCAN_STRATEGY=strict
88
86
  TERMINAL_PROMPT_SCAN_MIN_SCORE=5
89
- BROWSER_ENABLED=false
90
- BROWSER_HEADLESS=false
91
- BROWSER_DEVTOOLS=false
92
- # BROWSER_ADDRESS=http://localhost:5173
93
- BROWSER_TIMEOUT_MS=20000
94
- BROWSER_MAX_EVENTS=200
95
- BROWSER_WAIT_UNTIL=load
96
- # BROWSER_EXECUTABLE_PATH=
97
- # BROWSER_CHANNEL=chrome
98
- BROWSER_SLOW_MO_MS=0
99
87
 
100
- # Optional outbound proxy.
88
+ # Optional outbound proxy for Telegram.
101
89
  # PROXY_USE=http
102
90
  # HTTP_PROXY=http://user:pass@proxy.example:3128
103
91
  # SOCKS5_PROXY=socks5h://user:pass@proxy.example:1080
104
92
 
93
+ NAMESPACE=mcp
94
+ NODE_ID=gateway
105
95
  LOG_LEVEL=info
106
- LOG_FILE_ENABLED=true
96
+ LOG_FILE_ENABLED=false
107
97
  LOG_FILE_PATH=.tellymcp/log.jsonl
108
98
  # LOG_STDERR_LEVEL=error
109
- ENABLE_LOGFEED=0
99
+ # LOG_FILE_LEVEL=info
100
+ LOGFEED_ENABLED=false
package/CHANGELOG.md CHANGED
@@ -2,7 +2,52 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ### Changed
6
+
7
+ - CLI больше не загружает `node-pty` до разбора команды: `tellymcp --help`,
8
+ setup и diagnostics остаются доступны при отсутствующем native addon.
9
+ `doctor`, `run` и postinstall теперь реально проверяют `pty.node` и выводят
10
+ platform-aware инструкции для Linux ARM64, npm lifecycle scripts и rebuild.
11
+ - Redis теперь используется только в режимах gateway и `both`. Client runtime
12
+ больше не подключается к Redis и не требует `REDIS_*`; временное состояние
13
+ хранится локально в процессе, а стабильный `gateway_client_uuid` — в
14
+ `.mcpsession.json`. Клиентские шаблоны, migration, configure, doctor, prune и
15
+ runtime diagnostics приведены к этой модели.
16
+
5
17
  ### Added
18
+
19
+ - Добавлен локальный web-конфигуратор `tellymcp configure`: browser wizard
20
+ предлагает выбрать Client или Gateway, показывает role-specific поля,
21
+ формирует HTTP/WS/WebApp/webhook/OAuth URL из одного Public base URL,
22
+ показывает русские hints и примеры, выполняет role-specific live-check
23
+ Telegram, Redis, PostgreSQL, gateway HTTP/WS и RabbitMQ, затем скачивает
24
+ `.env-client` либо `.env-gateway`.
25
+ - Добавлен безопасный MCP tool `get_runtime_diagnostics` для end-to-end проверки
26
+ версии/protocol, принятой env-схемы, runtime state store, PTY, gateway config и
27
+ gateway-to-client relay без вывода секретов; Redis проверяется только на gateway.
28
+ - Добавлены связанные MCP tools `get_file_list` и `get_file` для получения
29
+ файлов из workspace выбранной live-консоли через gateway. Первый возвращает
30
+ список managed files и точные пути, второй принимает `file_path` либо
31
+ `selector=latest_screenshot`. По умолчанию `get_file(type="url")` возвращает
32
+ короткоживущую download-ссылку в `data`; временная gateway-копия хранится в
33
+ `.tellymcp/tmp/file-links`, а `type="base64"` остаётся fallback.
34
+ - Добавлен явный режим `get_file(type="image")`: download URL остаётся в
35
+ `structuredContent.data`, сам structured type равен `image`, а изображение
36
+ возвращается отдельным нативным MCP-блоком, чтобы Claude и другие совместимые
37
+ клиенты могли рендерить его inline.
38
+ - Для Claude.ai сохранён совместимый `type="base64"`: полный JSON вместе с raw
39
+ base64 в `data` возвращается обычным MCP text-блоком без native image, поскольку
40
+ некоторые MCP-host адаптеры заменяют изображение на `[image]` и скрывают
41
+ structured output от модели.
42
+ - Добавлен `get_file(type="text")` для прямого чтения UTF-8 Markdown и исходников
43
+ через native MCP text-блок. Для `.ts`, `.tsx` и других source-расширений добавлены
44
+ текстовые MIME overrides.
45
+ - Доступ к live `.env`, credential stores, private-key расширениям и чувствительным
46
+ директориям теперь блокируется на клиенте до чтения или отправки файла; выход
47
+ за workspace и через symlink по-прежнему запрещён.
48
+ - Имена временных gateway-файлов очищаются до безопасного basename: управляющие
49
+ и файлово-зарезервированные символы заменяются перед сохранением и формированием
50
+ `Content-Disposition`.
6
51
  - Перенос `telegram_mcp` на сервисную архитектуру `Moleculer`:
7
52
  - `telegramMcp.runtime`
8
53
  - `telegramMcp.http`
@@ -74,6 +119,14 @@
74
119
  - безопасные packaged templates для `.env`
75
120
 
76
121
  ### Changed
122
+
123
+ - Общее чтение workspace-файлов теперь проверяет реальный путь после разрешения
124
+ symlink и не позволяет выйти за пределы workspace.
125
+ - Telegram Mini App Live Console переведена на WS-only rendering:
126
+ - HTTP polling и `/api/view` удалены
127
+ - после разрыва WebSocket автоматически восстанавливается с exponential backoff
128
+ - размеры xterm рассчитываются официальным `@xterm/addon-fit`
129
+ - resize колонок и строк передаётся локальным и relay PTY
77
130
  - Полностью убран legacy standalone MCP transport. `telegram_mcp` работает только через REST/MCP over HTTP.
78
131
  - Локальный standalone HTTP listener убран; `telegram_mcp` больше не поднимает отдельный сервер вне Moleculer gateway.
79
132
  - UI Telegram переосмыслен по двум режимам:
@@ -113,6 +166,10 @@
113
166
  - старый `go/node terminal-proxy` path полностью удалён, поддерживается только прямой локальный terminal runtime
114
167
 
115
168
  ### Fixed
169
+
170
+ - Remote session-context actions больше не пытаются повторно уйти с client node
171
+ обратно в gateway без `clientUuid`; backend error payload дополнительно
172
+ ограничен по размеру, чтобы relay-сбой не создавал рекурсивный exception.
116
173
  - Исправлен `Headers have already sent` при работе MCP/WebApp через общий HTTP runtime.
117
174
  - Исправлены route/alias проблемы после перехода под `${ROOT_PREFIX}`.
118
175
  - Исправлены зависания Mini App bootstrap и проблемы с relative WebApp routes.
package/README-ru.md CHANGED
@@ -27,6 +27,7 @@
27
27
 
28
28
  - даёт MCP tools для human-in-the-loop через Telegram
29
29
  - позволяет одной консоли агента ставить задачу другой консоли
30
+ - позволяет MCP chat-клиенту получать проектный текст, изображения и артефакты выбранной консоли
30
31
  - хранит structured xchange records в `.mcp-xchange`
31
32
  - поддерживает browser automation через Playwright
32
33
  - умеет attach к уже открытому Firefox или Chrome через bundled local extensions
@@ -66,6 +67,7 @@ Gateway
66
67
  - `telegram_message`
67
68
  - `notify_telegram`
68
69
  - `browser_screenshot(send_to_telegram=true)`
70
+ - `get_file` для возврата скриншотов и артефактов в MCP chat-клиент
69
71
 
70
72
  Для agent-to-agent:
71
73
 
@@ -74,6 +76,10 @@ Gateway
74
76
  - `send_partner_file`
75
77
  - `list_gateway_sessions`
76
78
 
79
+ Для диагностики:
80
+
81
+ - `get_runtime_diagnostics` для безопасной end-to-end проверки gateway/client
82
+
77
83
  Для браузера:
78
84
 
79
85
  - `browser_open`
@@ -87,6 +93,15 @@ Gateway
87
93
  - `browser_recording_stop`
88
94
  - `browser_recording_status`
89
95
 
96
+ Файлы:
97
+
98
+ - `get_file_list(source=..., limit=...)`
99
+ - `get_file(file_path=..., type="url")`
100
+ - `get_file(file_path=..., type="image")`
101
+ - `get_file(file_path=..., type="text")`
102
+ - `get_file(file_path=..., type="base64")`
103
+ - `get_file(selector="latest_screenshot")`
104
+
90
105
  Синхронизация инструкций:
91
106
 
92
107
  - `refresh_tools_markdown`
@@ -95,17 +110,38 @@ Gateway
95
110
  ## Требования
96
111
 
97
112
  - Node.js `>= 24`
98
- - Redis
113
+ - Python 3, `make` и C/C++ toolchain на Linux для локальной сборки native addon `node-pty`; npm lifecycle scripts должны быть включены
114
+ - Redis только для режимов gateway и `both`; клиент Redis не использует
99
115
  - PostgreSQL для gateway mode
100
116
  - опционально RabbitMQ для durable gateway fanout
101
117
  - Playwright browser binaries, если нужны browser tools
102
118
 
103
119
  ## Установка
104
120
 
121
+ На Debian/Ubuntu сначала установи зависимости для сборки native PTY:
122
+
123
+ ```bash
124
+ sudo apt install -y python3 make g++
125
+ npm config set ignore-scripts false
126
+ ```
127
+
128
+ ```bash
129
+ npm install -g @deadragdoll/tellymcp --foreground-scripts
130
+ ```
131
+
132
+ Опубликованная зависимость `node-pty` не содержит готового Linux ARM64 binary,
133
+ поэтому install lifecycle собирает `pty.node` локально. Если пакет ранее
134
+ установился без него, восстанови глобальную установку:
135
+
105
136
  ```bash
106
- npm install -g @deadragdoll/tellymcp
137
+ npm rebuild -g @deadragdoll/tellymcp --foreground-scripts
138
+ tellymcp doctor --env <file>
107
139
  ```
108
140
 
141
+ `tellymcp --help` и setup-команды не загружают native PTY. Runtime проверяет
142
+ модуль перед запуском и вместо сырого stack trace выводит те же инструкции по
143
+ восстановлению.
144
+
109
145
  Если нужны browser tools:
110
146
 
111
147
  ```bash
@@ -139,9 +175,20 @@ tellymcp codex-plugin install
139
175
  ```bash
140
176
  mkdir -p ~/telly-gateway
141
177
  cd ~/telly-gateway
142
- tellymcp init gateway
178
+ tellymcp configure
143
179
  ```
144
180
 
181
+ Команда открывает защищённую одноразовым токеном локальную страницу на
182
+ `127.0.0.1`. Выбери в wizard роль `Gateway`, заполни и проверь настройки, затем
183
+ сохрани `.env-gateway` обычным browser download. Перед использованием выставь
184
+ файлу права `0600`. `tellymcp init gateway` остаётся вариантом для ручного
185
+ редактирования шаблона.
186
+
187
+ Публичный origin или API base вводится один раз. Wizard сам формирует gateway
188
+ HTTP, WebSocket, Mini App, webhook, root-prefix и опциональные OAuth URL.
189
+ На ключевых этапах доступны реальные проверки Telegram, Redis, PostgreSQL,
190
+ gateway HTTP/WebSocket и опционального RabbitMQ.
191
+
145
192
  Или возьми sample:
146
193
 
147
194
  - [.env.example.gateway](./.env.example.gateway)
@@ -156,7 +203,8 @@ tellymcp init gateway
156
203
  - `DB_NAME`
157
204
  - `GATEWAY_PUBLIC_URL`
158
205
  - `GATEWAY_WS_URL`
159
- - `GATEWAY_TOKEN`
206
+ - `GATEWAY_SCOPE_TOKEN`
207
+ - `GATEWAY_AUTH_TOKEN`
160
208
 
161
209
  Запуск:
162
210
 
@@ -171,9 +219,17 @@ tellymcp run --env .env
171
219
  ```bash
172
220
  mkdir -p ~/agent-a
173
221
  cd ~/agent-a
174
- tellymcp init client
222
+ tellymcp configure
175
223
  ```
176
224
 
225
+ Выбери в wizard роль `Client`. В форме есть подключение к gateway, identity
226
+ консоли, terminal, browser, MCP и расширенные runtime-настройки. После
227
+ валидации браузер скачает `.env-client`. Флаг `--no-open` выводит локальный URL
228
+ без автоматического открытия браузера.
229
+
230
+ Для клиента тот же Public base URL автоматически формирует
231
+ `GATEWAY_PUBLIC_URL`, `GATEWAY_WS_URL` и `GATEWAY_WS_PATH`.
232
+
177
233
  Или используй sample:
178
234
 
179
235
  - [.env.example.client](./.env.example.client)
@@ -182,7 +238,8 @@ tellymcp init client
182
238
 
183
239
  - `GATEWAY_PUBLIC_URL`
184
240
  - `GATEWAY_WS_URL`
185
- - `GATEWAY_TOKEN`
241
+ - `GATEWAY_SCOPE_TOKEN`
242
+ - `GATEWAY_AUTH_TOKEN` (тот же transport-токен, который задан на gateway)
186
243
  - `GATEWAY_USER_UUID`, если консоль должна быть видна конкретному владельцу в gateway-боте
187
244
 
188
245
  Рекомендуется:
@@ -201,6 +258,10 @@ tellymcp run --env .env -s NEW
201
258
  - `local_session_id`
202
259
  - `session_label`
203
260
  - `env_file`
261
+ - `gateway_client_uuid`
262
+
263
+ Runtime-состояние клиента локальное и не требует Redis. Сохранённый
264
+ `gateway_client_uuid` обеспечивает стабильную идентичность после перезапуска.
204
265
 
205
266
  Поэтому дальше в том же каталоге обычно достаточно:
206
267
 
@@ -340,6 +401,7 @@ Gateway prompt scanner теперь живёт от live-client lifecycle:
340
401
 
341
402
  Канонические стартовые точки:
342
403
 
404
+ - [Контракт env и руководство по миграции](./docs/ENVIRONMENT.md)
343
405
  - [.env.example.gateway](./.env.example.gateway)
344
406
  - [.env.example.client](./.env.example.client)
345
407
 
@@ -355,6 +417,8 @@ Samples уже вычищены под текущий runtime:
355
417
  - убраны obsolete pairing-oriented тексты
356
418
  - убраны неиспользуемые секреты вроде `SESSION_SECRET`
357
419
  - убран неиспользуемый `APP_NAME`
420
+ - неоднозначные старые имена заменены на `TERMINAL_*`, `GATEWAY_SCOPE_TOKEN`,
421
+ `TELEGRAM_REQUEST_MODE`, `DB_SCHEMA` и `LOGFEED_ENABLED`
358
422
 
359
423
  ## Операционные команды
360
424
 
@@ -370,11 +434,21 @@ tellymcp doctor --env .env
370
434
  tellymcp system-prune --env .env --yes
371
435
  ```
372
436
 
437
+ Миграция старого env в текущий ролевой контракт:
438
+
439
+ ```bash
440
+ tellymcp migrate-env ./old.env > ./.migrated-env
441
+ ```
442
+
443
+ Fallback на старую схему отсутствует. Если найдены legacy-ключи, запуск
444
+ останавливается и выводит команду миграции.
445
+
373
446
  ## Карта документации
374
447
 
375
448
  - [README.md](./README.md)
376
449
  - [STANDALONE.md](./docs/STANDALONE.md)
377
450
  - [STANDALONE-ru.md](./docs/STANDALONE-ru.md)
451
+ - [CHAT_CONNECTOR.md](./docs/CHAT_CONNECTOR.md) — OAuth-коннектор ChatGPT/Claude
378
452
  - [TOOLS.md](./TOOLS.md)
379
453
  - [screenshots/README.md](./screenshots/README.md)
380
454