@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.
- package/.env.example.client +23 -39
- package/.env.example.gateway +52 -61
- package/CHANGELOG.md +57 -0
- package/README-ru.md +80 -6
- package/README.md +80 -6
- package/TOOLS.md +219 -10
- package/config/templates/env.both.template +19 -7
- package/config/templates/env.client.template +9 -19
- package/config/templates/env.gateway.template +19 -31
- package/dist/cli.js +252 -47
- package/dist/configureServer.js +966 -0
- package/dist/envMigration.js +316 -0
- package/dist/moleculer.config.js +1 -3
- package/dist/services/features/telegram-mcp/approval.service.js +1 -1
- package/dist/services/features/telegram-mcp/browser.service.js +18 -0
- package/dist/services/features/telegram-mcp/collaboration.service.js +2 -2
- package/dist/services/features/telegram-mcp/ensuredb.service.js +1 -1
- package/dist/services/features/telegram-mcp/file-content.service.js +94 -0
- package/dist/services/features/telegram-mcp/gateway-delivery.service.js +5 -1
- package/dist/services/features/telegram-mcp/gateway-socket.service.js +43 -11
- package/dist/services/features/telegram-mcp/gateway.service.js +1 -1
- package/dist/services/features/telegram-mcp/mcp-http.service.js +1 -0
- package/dist/services/features/telegram-mcp/mcp-server.service.js +20 -0
- package/dist/services/features/telegram-mcp/session-context.service.js +25 -1
- package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +79 -67
- package/dist/services/features/telegram-mcp/src/app/config/env.js +129 -38
- package/dist/services/features/telegram-mcp/src/app/config/environmentContract.js +66 -0
- package/dist/services/features/telegram-mcp/src/app/http.js +139 -99
- package/dist/services/features/telegram-mcp/src/app/oauthFacade.js +642 -0
- package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +151 -170
- package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +96 -99
- package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +88 -19
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserAttachActiveTabTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserAttachTabTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserDetachTabTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserListAttachedInstancesTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserListTabsTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +412 -29
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/browserRecordingBundle.js +37 -3
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachRegistry.js +7 -6
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachServer.js +214 -37
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/types.js +186 -0
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/collaborationService.js +2 -0
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/gatewaySessionsService.js +5 -5
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +6 -3
- package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +5 -2
- package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +4 -4
- package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +33 -36
- package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/remoteConsoleActionClient.js +4 -3
- package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileListTool.js +33 -0
- package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileService.js +327 -0
- package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileTool.js +81 -0
- package/dist/services/features/telegram-mcp/src/features/file-content/model/temporaryFileLinkStore.js +307 -0
- package/dist/services/features/telegram-mcp/src/features/file-content/model/workspaceFilePolicy.js +115 -0
- package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +9 -5
- package/dist/services/features/telegram-mcp/src/features/session-context/model/getRuntimeDiagnosticsTool.js +30 -0
- package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +169 -7
- package/dist/services/features/telegram-mcp/src/shared/integrations/memory/processLocalStateStore.js +260 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +1 -1
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +4 -1
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConsoleRegistry.js +2 -2
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +6 -3
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMessageFlow.js +1 -1
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectState.js +2 -2
- package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +29 -6
- package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +100 -2
- package/dist/services/features/telegram-mcp/src/shared/lib/bodyLimits.js +63 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/gatewayAuth.js +13 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/gatewayScope.js +5 -5
- package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +10 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/time/localTimestamp.js +21 -0
- package/docs/CHAT_CONNECTOR.md +134 -0
- package/docs/STANDALONE-ru.md +41 -3
- package/docs/STANDALONE.md +41 -3
- package/package.json +5 -3
- package/packages/chrome-attach-extension/dist/background.js +572 -163
- package/packages/chrome-attach-extension/dist/manifest.json +2 -1
- package/packages/chrome-attach-extension/dist/options.js +15 -2
- package/packages/chrome-attach-extension/dist/recorder-content.js +14 -1
- package/packages/chrome-attach-extension/dist/recorder-page.js +34 -18
- package/packages/firefox-attach-extension/dist/background.js +413 -33
- package/packages/firefox-attach-extension/dist/manifest.json +0 -12
- package/packages/firefox-attach-extension/dist/options.js +14 -1
- package/packages/firefox-attach-extension/dist/recorder-content.js +14 -1
- package/packages/firefox-attach-extension/dist/recorder-page.js +34 -18
- package/scripts/postinstall.js +33 -1
package/.env.example.client
CHANGED
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
# TellyMCP
|
|
1
|
+
# TellyMCP agent-console example. See docs/ENVIRONMENT.md for the complete contract.
|
|
2
2
|
|
|
3
|
-
#
|
|
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
|
-
#
|
|
7
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
70
|
+
# LOG_FILE_LEVEL=info
|
|
71
|
+
LOGFEED_ENABLED=false
|
package/.env.example.gateway
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
#
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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=
|
|
66
|
-
WEBAPP_POLL_INTERVAL_MS=2000
|
|
78
|
+
WEBAPP_VISIBLE_SCREENS=2
|
|
67
79
|
WEBAPP_ACTION_COOLDOWN_MS=150
|
|
68
80
|
|
|
69
|
-
|
|
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=
|
|
96
|
+
LOG_FILE_ENABLED=false
|
|
107
97
|
LOG_FILE_PATH=.tellymcp/log.jsonl
|
|
108
98
|
# LOG_STDERR_LEVEL=error
|
|
109
|
-
|
|
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
|
-
-
|
|
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
|
|
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
|
|
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
|
-
- `
|
|
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
|
|
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
|
-
- `
|
|
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
|
|