@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,13 +1,14 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "TellyMCP Chrome Attach",
4
- "version": "0.0.1",
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().toISOString(),
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().toISOString(),
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().toISOString(),
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().toISOString(),
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().toISOString(),
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().toISOString(),
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().toISOString();
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().toISOString(),
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
- const bodyText = await response.clone().text();
156
- emit({
157
- kind: "network_response_body",
158
- source: "page",
159
- at: new Date().toISOString(),
160
- request_id: requestId,
161
- url: request.url,
162
- body_text: truncateText(bodyText),
163
- body_truncated: bodyText.length > MAX_TEXT_CHARS,
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().toISOString();
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().toISOString(),
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().toISOString(),
269
+ at: formatLocalTimestamp(new Date()),
254
270
  request_id: meta.request_id,
255
271
  url: meta.url,
256
272
  body_text: truncateText(this.responseText),