@deadragdoll/tellymcp 0.0.13 → 0.0.14
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 +5 -1
- package/.env.example.gateway +16 -1
- package/CHANGELOG.md +30 -0
- package/README-ru.md +14 -0
- package/README.md +14 -0
- package/TOOLS.md +182 -10
- package/config/templates/env.both.template +15 -2
- package/config/templates/env.client.template +5 -2
- package/config/templates/env.gateway.template +15 -2
- package/dist/cli.js +28 -1
- package/dist/services/features/telegram-mcp/browser.service.js +18 -0
- 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/mcp-http.service.js +1 -0
- package/dist/services/features/telegram-mcp/mcp-server.service.js +18 -0
- package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +9 -1
- package/dist/services/features/telegram-mcp/src/app/config/env.js +119 -2
- 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 +62 -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 +410 -27
- 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/sendPartnerFileService.js +6 -3
- package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +4 -1
- package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +33 -35
- 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 +5 -1
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +3 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +6 -3
- 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/time/localTimestamp.js +21 -0
- package/docs/CHAT_CONNECTOR.md +134 -0
- package/docs/STANDALONE-ru.md +13 -0
- package/docs/STANDALONE.md +13 -0
- 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
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "TellyMCP Chrome Attach",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"description": "Attach TellyMCP to an already running Chrome session.",
|
|
6
6
|
"permissions": [
|
|
7
7
|
"tabs",
|
|
8
8
|
"activeTab",
|
|
9
9
|
"storage",
|
|
10
10
|
"cookies",
|
|
11
|
+
"alarms",
|
|
11
12
|
"webNavigation",
|
|
12
13
|
"webRequest",
|
|
13
14
|
"scripting"
|
|
@@ -24,6 +24,19 @@ const CONTROL_PANEL_PORT_NAME = "telly-control-panel";
|
|
|
24
24
|
let controlPanelPort = null;
|
|
25
25
|
let keepAliveTimer = null;
|
|
26
26
|
|
|
27
|
+
function padNumber(value, length = 2) {
|
|
28
|
+
return String(value).padStart(length, "0");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function formatLocalTimestamp(date = new Date()) {
|
|
32
|
+
return `${date.getFullYear()}-${padNumber(date.getMonth() + 1)}-${padNumber(date.getDate())}T${padNumber(
|
|
33
|
+
date.getHours(),
|
|
34
|
+
)}:${padNumber(date.getMinutes())}:${padNumber(date.getSeconds())}.${padNumber(
|
|
35
|
+
date.getMilliseconds(),
|
|
36
|
+
3,
|
|
37
|
+
)}`;
|
|
38
|
+
}
|
|
39
|
+
|
|
27
40
|
function storageGet(defaults) {
|
|
28
41
|
return new Promise((resolve, reject) => {
|
|
29
42
|
browser.storage.local.get(defaults, (result) => {
|
|
@@ -289,7 +302,7 @@ function startControlPanelPort() {
|
|
|
289
302
|
try {
|
|
290
303
|
controlPanelPort?.postMessage({
|
|
291
304
|
type: "keepalive",
|
|
292
|
-
at: new Date()
|
|
305
|
+
at: formatLocalTimestamp(new Date()),
|
|
293
306
|
});
|
|
294
307
|
} catch {
|
|
295
308
|
// ignore
|
|
@@ -326,7 +339,7 @@ async function sendPopupCommand(type, payload = {}, timeoutMs = 5000) {
|
|
|
326
339
|
command_id: commandId,
|
|
327
340
|
type,
|
|
328
341
|
...payload,
|
|
329
|
-
at: new Date()
|
|
342
|
+
at: formatLocalTimestamp(new Date()),
|
|
330
343
|
},
|
|
331
344
|
});
|
|
332
345
|
try {
|
|
@@ -19,6 +19,19 @@
|
|
|
19
19
|
}
|
|
20
20
|
window.__tellyRecorderContentInstalled = true;
|
|
21
21
|
|
|
22
|
+
function padNumber(value, length = 2) {
|
|
23
|
+
return String(value).padStart(length, "0");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function formatLocalTimestamp(date = new Date()) {
|
|
27
|
+
return `${date.getFullYear()}-${padNumber(date.getMonth() + 1)}-${padNumber(date.getDate())}T${padNumber(
|
|
28
|
+
date.getHours(),
|
|
29
|
+
)}:${padNumber(date.getMinutes())}:${padNumber(date.getSeconds())}.${padNumber(
|
|
30
|
+
date.getMilliseconds(),
|
|
31
|
+
3,
|
|
32
|
+
)}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
22
35
|
function emit(payload) {
|
|
23
36
|
void sendRuntimeMessage({
|
|
24
37
|
type: "telly_recording_page_event",
|
|
@@ -31,7 +44,7 @@
|
|
|
31
44
|
kind: "page_snapshot",
|
|
32
45
|
source: "content",
|
|
33
46
|
reason,
|
|
34
|
-
at: new Date()
|
|
47
|
+
at: formatLocalTimestamp(new Date()),
|
|
35
48
|
url: location.href,
|
|
36
49
|
title: document.title,
|
|
37
50
|
ready_state: document.readyState,
|
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
window.__tellyRecorderPageInstalled = true;
|
|
6
6
|
|
|
7
7
|
const MAX_TEXT_CHARS = 64 * 1024;
|
|
8
|
+
const padNumber = (value, length = 2) => String(value).padStart(length, "0");
|
|
9
|
+
const formatLocalTimestamp = (date = new Date()) => {
|
|
10
|
+
return `${date.getFullYear()}-${padNumber(date.getMonth() + 1)}-${padNumber(date.getDate())}T${padNumber(
|
|
11
|
+
date.getHours(),
|
|
12
|
+
)}:${padNumber(date.getMinutes())}:${padNumber(date.getSeconds())}.${padNumber(
|
|
13
|
+
date.getMilliseconds(),
|
|
14
|
+
3,
|
|
15
|
+
)}`;
|
|
16
|
+
};
|
|
8
17
|
const truncateText = (value) => {
|
|
9
18
|
const text = String(value ?? "");
|
|
10
19
|
return text.length > MAX_TEXT_CHARS ? text.slice(0, MAX_TEXT_CHARS) : text;
|
|
@@ -63,7 +72,7 @@
|
|
|
63
72
|
emit({
|
|
64
73
|
kind: "console_event",
|
|
65
74
|
source: "page",
|
|
66
|
-
at: new Date()
|
|
75
|
+
at: formatLocalTimestamp(new Date()),
|
|
67
76
|
level,
|
|
68
77
|
text: truncateText(
|
|
69
78
|
args
|
|
@@ -92,7 +101,7 @@
|
|
|
92
101
|
emit({
|
|
93
102
|
kind: "console_event",
|
|
94
103
|
source: "page",
|
|
95
|
-
at: new Date()
|
|
104
|
+
at: formatLocalTimestamp(new Date()),
|
|
96
105
|
level: "error",
|
|
97
106
|
text: truncateText(event.message || "window error"),
|
|
98
107
|
args: [
|
|
@@ -111,7 +120,7 @@
|
|
|
111
120
|
emit({
|
|
112
121
|
kind: "console_event",
|
|
113
122
|
source: "page",
|
|
114
|
-
at: new Date()
|
|
123
|
+
at: formatLocalTimestamp(new Date()),
|
|
115
124
|
level: "error",
|
|
116
125
|
text: "Unhandled promise rejection",
|
|
117
126
|
args: [serializeValue(event.reason)],
|
|
@@ -122,7 +131,7 @@
|
|
|
122
131
|
|
|
123
132
|
const originalFetch = window.fetch.bind(window);
|
|
124
133
|
window.fetch = async (...args) => {
|
|
125
|
-
const startedAt = new Date()
|
|
134
|
+
const startedAt = formatLocalTimestamp(new Date());
|
|
126
135
|
const request = new Request(...args);
|
|
127
136
|
const requestId = `page-fetch-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
128
137
|
const body = await serializeRequestBody(request);
|
|
@@ -142,7 +151,7 @@
|
|
|
142
151
|
emit({
|
|
143
152
|
kind: "network_response_complete",
|
|
144
153
|
source: "page",
|
|
145
|
-
at: new Date()
|
|
154
|
+
at: formatLocalTimestamp(new Date()),
|
|
146
155
|
request_id: requestId,
|
|
147
156
|
url: request.url,
|
|
148
157
|
method: request.method,
|
|
@@ -152,16 +161,23 @@
|
|
|
152
161
|
});
|
|
153
162
|
|
|
154
163
|
try {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
void response
|
|
165
|
+
.clone()
|
|
166
|
+
.text()
|
|
167
|
+
.then((bodyText) => {
|
|
168
|
+
emit({
|
|
169
|
+
kind: "network_response_body",
|
|
170
|
+
source: "page",
|
|
171
|
+
at: formatLocalTimestamp(new Date()),
|
|
172
|
+
request_id: requestId,
|
|
173
|
+
url: request.url,
|
|
174
|
+
body_text: truncateText(bodyText),
|
|
175
|
+
body_truncated: bodyText.length > MAX_TEXT_CHARS,
|
|
176
|
+
});
|
|
177
|
+
})
|
|
178
|
+
.catch(() => {
|
|
179
|
+
// ignore
|
|
180
|
+
});
|
|
165
181
|
} catch {
|
|
166
182
|
// ignore
|
|
167
183
|
}
|
|
@@ -188,7 +204,7 @@
|
|
|
188
204
|
return originalSetHeader.call(this, name, value);
|
|
189
205
|
};
|
|
190
206
|
XMLHttpRequest.prototype.send = function patchedSend(body) {
|
|
191
|
-
const startedAt = new Date()
|
|
207
|
+
const startedAt = formatLocalTimestamp(new Date());
|
|
192
208
|
const meta = this.__tellyRecorder || {
|
|
193
209
|
request_id: `page-xhr-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`,
|
|
194
210
|
method: "GET",
|
|
@@ -238,7 +254,7 @@
|
|
|
238
254
|
emit({
|
|
239
255
|
kind: "network_response_complete",
|
|
240
256
|
source: "page",
|
|
241
|
-
at: new Date()
|
|
257
|
+
at: formatLocalTimestamp(new Date()),
|
|
242
258
|
request_id: meta.request_id,
|
|
243
259
|
url: meta.url,
|
|
244
260
|
method: meta.method,
|
|
@@ -250,7 +266,7 @@
|
|
|
250
266
|
emit({
|
|
251
267
|
kind: "network_response_body",
|
|
252
268
|
source: "page",
|
|
253
|
-
at: new Date()
|
|
269
|
+
at: formatLocalTimestamp(new Date()),
|
|
254
270
|
request_id: meta.request_id,
|
|
255
271
|
url: meta.url,
|
|
256
272
|
body_text: truncateText(this.responseText),
|