@deadragdoll/tellymcp 0.0.12 → 0.0.13
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/README-ru.md +19 -0
- package/README.md +19 -0
- package/TOOLS.md +206 -3
- package/dist/cli.js +109 -1
- package/dist/services/features/telegram-mcp/browser.service.js +38 -1
- package/dist/services/features/telegram-mcp/mcp-server.service.js +12 -0
- package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +14 -0
- package/dist/services/features/telegram-mcp/src/app/config/env.js +13 -0
- package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +147 -2
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserClickTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserDomTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserFillTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserInjectScriptTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserListAttachedInstancesTool.js +33 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserListTabsTool.js +33 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserPressTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserRecordingStartTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserRecordingStatusTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserRecordingStopTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +485 -1
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/browserRecordingBundle.js +502 -0
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachRegistry.js +79 -0
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/firefoxAttachServer.js +559 -0
- package/dist/services/features/telegram-mcp/src/features/browser-attach/model/types.js +2 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +28 -0
- package/docs/STANDALONE-ru.md +42 -6
- package/docs/STANDALONE.md +42 -6
- package/package.json +6 -3
- package/packages/chrome-attach-extension/dist/background.js +1326 -0
- package/packages/chrome-attach-extension/dist/icon.svg +6 -0
- package/packages/chrome-attach-extension/dist/manifest.json +36 -0
- package/packages/chrome-attach-extension/dist/options.html +312 -0
- package/packages/chrome-attach-extension/dist/options.js +593 -0
- package/packages/chrome-attach-extension/dist/popup.html +93 -0
- package/packages/chrome-attach-extension/dist/popup.js +79 -0
- package/packages/chrome-attach-extension/dist/recorder-content.js +83 -0
- package/packages/chrome-attach-extension/dist/recorder-page.js +266 -0
- package/packages/firefox-attach-extension/README.md +13 -0
- package/packages/firefox-attach-extension/dist/background.js +1242 -0
- package/packages/firefox-attach-extension/dist/icon.svg +6 -0
- package/packages/firefox-attach-extension/dist/manifest.json +56 -0
- package/packages/firefox-attach-extension/dist/options.html +312 -0
- package/packages/firefox-attach-extension/dist/options.js +527 -0
- package/packages/firefox-attach-extension/dist/popup.html +93 -0
- package/packages/firefox-attach-extension/dist/popup.js +64 -0
- package/packages/firefox-attach-extension/dist/recorder-content.js +77 -0
- package/packages/firefox-attach-extension/dist/recorder-page.js +302 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
2
|
+
<rect width="64" height="64" rx="12" fill="#151515"/>
|
|
3
|
+
<rect x="10" y="10" width="44" height="44" rx="8" fill="#f3efe2"/>
|
|
4
|
+
<path d="M20 24h24v4H20zm0 12h24v4H20zm0 12h16v4H20z" fill="#151515"/>
|
|
5
|
+
<circle cx="47" cy="47" r="7" fill="#0a6e2f"/>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 2,
|
|
3
|
+
"name": "TellyMCP Firefox Attach",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"description": "Attach TellyMCP to an already running Firefox session.",
|
|
6
|
+
"icons": {
|
|
7
|
+
"32": "icon.svg"
|
|
8
|
+
},
|
|
9
|
+
"permissions": [
|
|
10
|
+
"tabs",
|
|
11
|
+
"activeTab",
|
|
12
|
+
"storage",
|
|
13
|
+
"cookies",
|
|
14
|
+
"webNavigation",
|
|
15
|
+
"webRequest",
|
|
16
|
+
"webRequestBlocking",
|
|
17
|
+
"webRequestFilterResponse",
|
|
18
|
+
"<all_urls>"
|
|
19
|
+
],
|
|
20
|
+
"background": {
|
|
21
|
+
"scripts": [
|
|
22
|
+
"background.js"
|
|
23
|
+
],
|
|
24
|
+
"persistent": true
|
|
25
|
+
},
|
|
26
|
+
"browser_action": {
|
|
27
|
+
"default_title": "TellyMCP Firefox Attach",
|
|
28
|
+
"default_icon": "icon.svg",
|
|
29
|
+
"default_popup": "popup.html",
|
|
30
|
+
"browser_style": true
|
|
31
|
+
},
|
|
32
|
+
"options_ui": {
|
|
33
|
+
"page": "options.html",
|
|
34
|
+
"browser_style": true
|
|
35
|
+
},
|
|
36
|
+
"content_scripts": [
|
|
37
|
+
{
|
|
38
|
+
"matches": [
|
|
39
|
+
"<all_urls>"
|
|
40
|
+
],
|
|
41
|
+
"js": [
|
|
42
|
+
"recorder-content.js"
|
|
43
|
+
],
|
|
44
|
+
"run_at": "document_start",
|
|
45
|
+
"all_frames": true
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"web_accessible_resources": [
|
|
49
|
+
"recorder-page.js"
|
|
50
|
+
],
|
|
51
|
+
"browser_specific_settings": {
|
|
52
|
+
"gecko": {
|
|
53
|
+
"id": "tellymcp-firefox-attach@deadragdoll"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>TellyMCP Firefox Attach</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light dark;
|
|
10
|
+
font-family: ui-monospace, "SFMono-Regular", "Cascadia Code", "Fira Code", monospace;
|
|
11
|
+
--bg-start: #fffdf8;
|
|
12
|
+
--bg-end: #f3efe2;
|
|
13
|
+
--card-bg: rgba(255, 255, 255, 0.88);
|
|
14
|
+
--card-border: #d7cfbb;
|
|
15
|
+
--text: #171717;
|
|
16
|
+
--muted: #4b4b4b;
|
|
17
|
+
--soft: #5a5a5a;
|
|
18
|
+
--accent: #0a6e2f;
|
|
19
|
+
--warn: #8a5a00;
|
|
20
|
+
--danger: #a4000f;
|
|
21
|
+
--button-border: #171717;
|
|
22
|
+
--tab-bg: #fff;
|
|
23
|
+
--tab-border: #cfc7b2;
|
|
24
|
+
--tab-active-bg: #edf8f0;
|
|
25
|
+
--input-bg: #fff;
|
|
26
|
+
--input-border: #c9c9c9;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@media (prefers-color-scheme: dark) {
|
|
30
|
+
:root {
|
|
31
|
+
--bg-start: #171a1d;
|
|
32
|
+
--bg-end: #101214;
|
|
33
|
+
--card-bg: rgba(28, 31, 35, 0.92);
|
|
34
|
+
--card-border: #323841;
|
|
35
|
+
--text: #f3f5f7;
|
|
36
|
+
--muted: #c5ccd3;
|
|
37
|
+
--soft: #98a2ad;
|
|
38
|
+
--accent: #71d08d;
|
|
39
|
+
--warn: #f3bf63;
|
|
40
|
+
--danger: #ff7a8a;
|
|
41
|
+
--button-border: #56606b;
|
|
42
|
+
--tab-bg: #20242a;
|
|
43
|
+
--tab-border: #3a414b;
|
|
44
|
+
--tab-active-bg: #1e3425;
|
|
45
|
+
--input-bg: #1f2429;
|
|
46
|
+
--input-border: #3a414b;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
body {
|
|
51
|
+
margin: 0;
|
|
52
|
+
min-height: 100vh;
|
|
53
|
+
padding: 24px;
|
|
54
|
+
background: linear-gradient(180deg, var(--bg-start) 0%, var(--bg-end) 100%);
|
|
55
|
+
color: var(--text);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.shell {
|
|
59
|
+
max-width: 1080px;
|
|
60
|
+
margin: 0 auto;
|
|
61
|
+
display: grid;
|
|
62
|
+
gap: 18px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
h1 {
|
|
66
|
+
margin: 0;
|
|
67
|
+
font-size: 28px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.hint {
|
|
71
|
+
margin: 0;
|
|
72
|
+
color: var(--muted);
|
|
73
|
+
line-height: 1.5;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.grid {
|
|
77
|
+
display: grid;
|
|
78
|
+
grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
|
|
79
|
+
gap: 18px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.card {
|
|
83
|
+
border: 1px solid var(--card-border);
|
|
84
|
+
background: var(--card-bg);
|
|
85
|
+
padding: 16px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.card h2 {
|
|
89
|
+
margin: 0 0 12px;
|
|
90
|
+
font-size: 16px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.status {
|
|
94
|
+
font-size: 15px;
|
|
95
|
+
font-weight: 700;
|
|
96
|
+
margin: 0 0 12px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.meta {
|
|
100
|
+
display: grid;
|
|
101
|
+
gap: 6px;
|
|
102
|
+
font-size: 12px;
|
|
103
|
+
color: var(--muted);
|
|
104
|
+
margin-bottom: 12px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.attached {
|
|
108
|
+
margin: 0 0 12px;
|
|
109
|
+
font-size: 12px;
|
|
110
|
+
color: var(--accent);
|
|
111
|
+
min-height: 16px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.action-status {
|
|
115
|
+
min-height: 18px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.tabs-title {
|
|
119
|
+
margin: 0 0 8px;
|
|
120
|
+
font-size: 13px;
|
|
121
|
+
font-weight: 700;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.tabs {
|
|
125
|
+
display: grid;
|
|
126
|
+
gap: 6px;
|
|
127
|
+
max-height: 480px;
|
|
128
|
+
overflow: auto;
|
|
129
|
+
margin-bottom: 14px;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.tab-row {
|
|
133
|
+
display: grid;
|
|
134
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
135
|
+
gap: 8px;
|
|
136
|
+
align-items: stretch;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.tab {
|
|
140
|
+
display: grid;
|
|
141
|
+
gap: 4px;
|
|
142
|
+
width: 100%;
|
|
143
|
+
text-align: left;
|
|
144
|
+
font: inherit;
|
|
145
|
+
padding: 10px;
|
|
146
|
+
border: 1px solid var(--tab-border);
|
|
147
|
+
background: var(--tab-bg);
|
|
148
|
+
cursor: pointer;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.tab.active {
|
|
152
|
+
border-color: var(--accent);
|
|
153
|
+
background: var(--tab-active-bg);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.tab.current {
|
|
157
|
+
border-style: dashed;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.tab.recording {
|
|
161
|
+
border-color: var(--warn);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.tab-head {
|
|
165
|
+
display: flex;
|
|
166
|
+
align-items: center;
|
|
167
|
+
gap: 8px;
|
|
168
|
+
min-width: 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.tab-title {
|
|
172
|
+
font-size: 12px;
|
|
173
|
+
font-weight: 700;
|
|
174
|
+
color: var(--text);
|
|
175
|
+
white-space: nowrap;
|
|
176
|
+
overflow: hidden;
|
|
177
|
+
text-overflow: ellipsis;
|
|
178
|
+
min-width: 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.tab-badges {
|
|
182
|
+
display: flex;
|
|
183
|
+
gap: 4px;
|
|
184
|
+
flex-wrap: wrap;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.badge {
|
|
188
|
+
font-size: 10px;
|
|
189
|
+
line-height: 1;
|
|
190
|
+
padding: 3px 5px;
|
|
191
|
+
border: 1px solid var(--tab-border);
|
|
192
|
+
color: var(--soft);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.badge.attached {
|
|
196
|
+
color: var(--accent);
|
|
197
|
+
border-color: var(--accent);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.badge.recording {
|
|
201
|
+
color: var(--warn);
|
|
202
|
+
border-color: var(--warn);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.tab-url {
|
|
206
|
+
font-size: 11px;
|
|
207
|
+
color: var(--soft);
|
|
208
|
+
white-space: nowrap;
|
|
209
|
+
overflow: hidden;
|
|
210
|
+
text-overflow: ellipsis;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
form {
|
|
214
|
+
display: grid;
|
|
215
|
+
gap: 14px;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
label {
|
|
219
|
+
display: grid;
|
|
220
|
+
gap: 8px;
|
|
221
|
+
font-weight: 600;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
input {
|
|
225
|
+
font: inherit;
|
|
226
|
+
padding: 10px 12px;
|
|
227
|
+
color: var(--text);
|
|
228
|
+
background: var(--input-bg);
|
|
229
|
+
border: 1px solid var(--input-border);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.actions {
|
|
233
|
+
display: flex;
|
|
234
|
+
gap: 10px;
|
|
235
|
+
flex-wrap: wrap;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
button.secondary {
|
|
239
|
+
font: inherit;
|
|
240
|
+
padding: 9px 14px;
|
|
241
|
+
border: 1px solid var(--button-border);
|
|
242
|
+
cursor: pointer;
|
|
243
|
+
background: transparent;
|
|
244
|
+
color: var(--text);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.tab-record-button {
|
|
248
|
+
min-width: 72px;
|
|
249
|
+
align-self: stretch;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
@media (max-width: 900px) {
|
|
253
|
+
.grid {
|
|
254
|
+
grid-template-columns: 1fr;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
</style>
|
|
258
|
+
</head>
|
|
259
|
+
<body>
|
|
260
|
+
<div class="shell">
|
|
261
|
+
<div>
|
|
262
|
+
<h1>TellyMCP Firefox Attach</h1>
|
|
263
|
+
<p class="hint">
|
|
264
|
+
Configure the local TellyMCP attach server and control the attached browser tab from this page. Popup controls are intentionally minimized; use this panel as the primary UI.
|
|
265
|
+
</p>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div class="grid">
|
|
269
|
+
<div class="card">
|
|
270
|
+
<h2>Connection</h2>
|
|
271
|
+
<p id="connection-status" class="status">Connecting...</p>
|
|
272
|
+
<div class="meta">
|
|
273
|
+
<div id="endpoint">Endpoint: -</div>
|
|
274
|
+
<div id="session">Session: -</div>
|
|
275
|
+
<div id="recording">Recording: -</div>
|
|
276
|
+
<div id="recording-tab">Recording tab: -</div>
|
|
277
|
+
<div id="recording-scope"></div>
|
|
278
|
+
</div>
|
|
279
|
+
<p id="attached-tab" class="attached">Attached: -</p>
|
|
280
|
+
<p id="action-status" class="attached action-status"></p>
|
|
281
|
+
<form id="settings-form">
|
|
282
|
+
<label>
|
|
283
|
+
Host
|
|
284
|
+
<input id="host" name="host" type="text" placeholder="127.0.0.1" />
|
|
285
|
+
</label>
|
|
286
|
+
<label>
|
|
287
|
+
Port
|
|
288
|
+
<input id="port" name="port" type="number" min="1" max="65535" placeholder="9999" />
|
|
289
|
+
</label>
|
|
290
|
+
<div class="actions">
|
|
291
|
+
<button type="submit" class="secondary">Save</button>
|
|
292
|
+
<button id="connection-toggle-button" class="secondary" type="button">Connect</button>
|
|
293
|
+
</div>
|
|
294
|
+
</form>
|
|
295
|
+
<div class="actions" style="margin-top: 14px;">
|
|
296
|
+
<input id="inject-namespace" type="text" value="TELLY" placeholder="Namespace" style="max-width: 140px;" />
|
|
297
|
+
<input id="inject-file" type="file" accept=".js,text/javascript,application/javascript" />
|
|
298
|
+
<button id="inject-script-button" class="secondary" type="button">Inject</button>
|
|
299
|
+
</div>
|
|
300
|
+
<p id="status" class="status"></p>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<div class="card">
|
|
304
|
+
<h2>Tabs</h2>
|
|
305
|
+
<p class="tabs-title">Tabs in current window</p>
|
|
306
|
+
<div id="tabs" class="tabs"></div>
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
<script src="options.js"></script>
|
|
311
|
+
</body>
|
|
312
|
+
</html>
|