@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.
Files changed (64) hide show
  1. package/.env.example.client +5 -1
  2. package/.env.example.gateway +16 -1
  3. package/CHANGELOG.md +30 -0
  4. package/README-ru.md +14 -0
  5. package/README.md +14 -0
  6. package/TOOLS.md +182 -10
  7. package/config/templates/env.both.template +15 -2
  8. package/config/templates/env.client.template +5 -2
  9. package/config/templates/env.gateway.template +15 -2
  10. package/dist/cli.js +28 -1
  11. package/dist/services/features/telegram-mcp/browser.service.js +18 -0
  12. package/dist/services/features/telegram-mcp/file-content.service.js +94 -0
  13. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +5 -1
  14. package/dist/services/features/telegram-mcp/gateway-socket.service.js +43 -11
  15. package/dist/services/features/telegram-mcp/mcp-http.service.js +1 -0
  16. package/dist/services/features/telegram-mcp/mcp-server.service.js +18 -0
  17. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +9 -1
  18. package/dist/services/features/telegram-mcp/src/app/config/env.js +119 -2
  19. package/dist/services/features/telegram-mcp/src/app/http.js +139 -99
  20. package/dist/services/features/telegram-mcp/src/app/oauthFacade.js +642 -0
  21. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +151 -170
  22. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +96 -99
  23. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +62 -19
  24. package/dist/services/features/telegram-mcp/src/features/browser/model/browserAttachActiveTabTool.js +28 -0
  25. package/dist/services/features/telegram-mcp/src/features/browser/model/browserAttachTabTool.js +28 -0
  26. package/dist/services/features/telegram-mcp/src/features/browser/model/browserDetachTabTool.js +28 -0
  27. package/dist/services/features/telegram-mcp/src/features/browser/model/browserListAttachedInstancesTool.js +1 -1
  28. package/dist/services/features/telegram-mcp/src/features/browser/model/browserListTabsTool.js +1 -1
  29. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +410 -27
  30. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/browserRecordingBundle.js +37 -3
  31. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachRegistry.js +7 -6
  32. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachServer.js +214 -37
  33. package/dist/services/features/telegram-mcp/src/features/browser-attach/model/types.js +186 -0
  34. package/dist/services/features/telegram-mcp/src/features/collaboration/model/collaborationService.js +2 -0
  35. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +6 -3
  36. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +4 -1
  37. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +33 -35
  38. package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileListTool.js +33 -0
  39. package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileService.js +327 -0
  40. package/dist/services/features/telegram-mcp/src/features/file-content/model/getFileTool.js +81 -0
  41. package/dist/services/features/telegram-mcp/src/features/file-content/model/temporaryFileLinkStore.js +307 -0
  42. package/dist/services/features/telegram-mcp/src/features/file-content/model/workspaceFilePolicy.js +115 -0
  43. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +5 -1
  44. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +3 -0
  45. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +6 -3
  46. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +29 -6
  47. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +100 -2
  48. package/dist/services/features/telegram-mcp/src/shared/lib/bodyLimits.js +63 -0
  49. package/dist/services/features/telegram-mcp/src/shared/lib/gatewayAuth.js +13 -0
  50. package/dist/services/features/telegram-mcp/src/shared/lib/time/localTimestamp.js +21 -0
  51. package/docs/CHAT_CONNECTOR.md +134 -0
  52. package/docs/STANDALONE-ru.md +13 -0
  53. package/docs/STANDALONE.md +13 -0
  54. package/package.json +5 -3
  55. package/packages/chrome-attach-extension/dist/background.js +572 -163
  56. package/packages/chrome-attach-extension/dist/manifest.json +2 -1
  57. package/packages/chrome-attach-extension/dist/options.js +15 -2
  58. package/packages/chrome-attach-extension/dist/recorder-content.js +14 -1
  59. package/packages/chrome-attach-extension/dist/recorder-page.js +34 -18
  60. package/packages/firefox-attach-extension/dist/background.js +413 -33
  61. package/packages/firefox-attach-extension/dist/manifest.json +0 -12
  62. package/packages/firefox-attach-extension/dist/options.js +14 -1
  63. package/packages/firefox-attach-extension/dist/recorder-content.js +14 -1
  64. package/packages/firefox-attach-extension/dist/recorder-page.js +34 -18
@@ -4,6 +4,19 @@
4
4
  }
5
5
  window.__tellyRecorderContentInstalled = true;
6
6
 
7
+ function padNumber(value, length = 2) {
8
+ return String(value).padStart(length, "0");
9
+ }
10
+
11
+ function formatLocalTimestamp(date = new Date()) {
12
+ return `${date.getFullYear()}-${padNumber(date.getMonth() + 1)}-${padNumber(date.getDate())}T${padNumber(
13
+ date.getHours(),
14
+ )}:${padNumber(date.getMinutes())}:${padNumber(date.getSeconds())}.${padNumber(
15
+ date.getMilliseconds(),
16
+ 3,
17
+ )}`;
18
+ }
19
+
7
20
  function emit(payload) {
8
21
  try {
9
22
  browser.runtime.sendMessage({
@@ -23,7 +36,7 @@
23
36
  kind: "page_snapshot",
24
37
  source: "content",
25
38
  reason,
26
- at: new Date().toISOString(),
39
+ at: formatLocalTimestamp(new Date()),
27
40
  url: location.href,
28
41
  title: document.title,
29
42
  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;
@@ -40,7 +49,7 @@
40
49
  emit({
41
50
  kind: "console_event",
42
51
  source: "page",
43
- at: new Date().toISOString(),
52
+ at: formatLocalTimestamp(new Date()),
44
53
  level,
45
54
  text:
46
55
  textOverride ||
@@ -128,7 +137,7 @@
128
137
  emit({
129
138
  kind: "console_event",
130
139
  source: "page",
131
- at: new Date().toISOString(),
140
+ at: formatLocalTimestamp(new Date()),
132
141
  level: "error",
133
142
  text: truncateText(event.message || "window error"),
134
143
  args: [
@@ -147,7 +156,7 @@
147
156
  emit({
148
157
  kind: "console_event",
149
158
  source: "page",
150
- at: new Date().toISOString(),
159
+ at: formatLocalTimestamp(new Date()),
151
160
  level: "error",
152
161
  text: "Unhandled promise rejection",
153
162
  args: [serializeValue(event.reason)],
@@ -158,7 +167,7 @@
158
167
 
159
168
  const originalFetch = window.fetch.bind(window);
160
169
  window.fetch = async (...args) => {
161
- const startedAt = new Date().toISOString();
170
+ const startedAt = formatLocalTimestamp(new Date());
162
171
  const request = new Request(...args);
163
172
  const requestId = `page-fetch-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
164
173
  const body = await serializeRequestBody(request);
@@ -178,7 +187,7 @@
178
187
  emit({
179
188
  kind: "network_response_complete",
180
189
  source: "page",
181
- at: new Date().toISOString(),
190
+ at: formatLocalTimestamp(new Date()),
182
191
  request_id: requestId,
183
192
  url: request.url,
184
193
  method: request.method,
@@ -188,16 +197,23 @@
188
197
  });
189
198
 
190
199
  try {
191
- const bodyText = await response.clone().text();
192
- emit({
193
- kind: "network_response_body",
194
- source: "page",
195
- at: new Date().toISOString(),
196
- request_id: requestId,
197
- url: request.url,
198
- body_text: truncateText(bodyText),
199
- body_truncated: bodyText.length > MAX_TEXT_CHARS,
200
- });
200
+ void response
201
+ .clone()
202
+ .text()
203
+ .then((bodyText) => {
204
+ emit({
205
+ kind: "network_response_body",
206
+ source: "page",
207
+ at: formatLocalTimestamp(new Date()),
208
+ request_id: requestId,
209
+ url: request.url,
210
+ body_text: truncateText(bodyText),
211
+ body_truncated: bodyText.length > MAX_TEXT_CHARS,
212
+ });
213
+ })
214
+ .catch(() => {
215
+ // ignore
216
+ });
201
217
  } catch {
202
218
  // ignore
203
219
  }
@@ -224,7 +240,7 @@
224
240
  return originalSetHeader.call(this, name, value);
225
241
  };
226
242
  XMLHttpRequest.prototype.send = function patchedSend(body) {
227
- const startedAt = new Date().toISOString();
243
+ const startedAt = formatLocalTimestamp(new Date());
228
244
  const meta = this.__tellyRecorder || {
229
245
  request_id: `page-xhr-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`,
230
246
  method: "GET",
@@ -274,7 +290,7 @@
274
290
  emit({
275
291
  kind: "network_response_complete",
276
292
  source: "page",
277
- at: new Date().toISOString(),
293
+ at: formatLocalTimestamp(new Date()),
278
294
  request_id: meta.request_id,
279
295
  url: meta.url,
280
296
  method: meta.method,
@@ -286,7 +302,7 @@
286
302
  emit({
287
303
  kind: "network_response_body",
288
304
  source: "page",
289
- at: new Date().toISOString(),
305
+ at: formatLocalTimestamp(new Date()),
290
306
  request_id: meta.request_id,
291
307
  url: meta.url,
292
308
  body_text: truncateText(this.responseText),