real-browser-mcp-server 1.3.3 → 1.4.0

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 (118) hide show
  1. package/README.md +96 -9
  2. package/dist/lib/cjs/index.d.ts +2 -0
  3. package/dist/lib/cjs/index.d.ts.map +1 -0
  4. package/dist/lib/cjs/index.js +386 -0
  5. package/dist/lib/cjs/index.js.map +1 -0
  6. package/dist/lib/cjs/module/pageController.d.ts +2 -0
  7. package/dist/lib/cjs/module/pageController.d.ts.map +1 -0
  8. package/{lib → dist/lib}/cjs/module/pageController.js +28 -29
  9. package/dist/lib/cjs/module/pageController.js.map +1 -0
  10. package/dist/lib/cjs/module/turnstile.d.ts +2 -0
  11. package/dist/lib/cjs/module/turnstile.d.ts.map +1 -0
  12. package/{lib → dist/lib}/cjs/module/turnstile.js +24 -12
  13. package/dist/lib/cjs/module/turnstile.js.map +1 -0
  14. package/dist/src/index.d.ts +11 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +118 -0
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/src/mcp/handlers/browser.d.ts +30 -0
  19. package/dist/src/mcp/handlers/browser.d.ts.map +1 -0
  20. package/dist/src/mcp/handlers/browser.js +232 -0
  21. package/dist/src/mcp/handlers/browser.js.map +1 -0
  22. package/dist/src/mcp/handlers/dom.d.ts +149 -0
  23. package/dist/src/mcp/handlers/dom.d.ts.map +1 -0
  24. package/dist/src/mcp/handlers/dom.js +577 -0
  25. package/dist/src/mcp/handlers/dom.js.map +1 -0
  26. package/dist/src/mcp/handlers/extract.d.ts +59 -0
  27. package/dist/src/mcp/handlers/extract.d.ts.map +1 -0
  28. package/dist/src/mcp/handlers/extract.js +455 -0
  29. package/dist/src/mcp/handlers/extract.js.map +1 -0
  30. package/dist/src/mcp/handlers/form-handlers.d.ts +9 -0
  31. package/dist/src/mcp/handlers/form-handlers.d.ts.map +1 -0
  32. package/dist/src/mcp/handlers/form-handlers.js +56 -0
  33. package/dist/src/mcp/handlers/form-handlers.js.map +1 -0
  34. package/dist/src/mcp/handlers/helpers.d.ts +47 -0
  35. package/dist/src/mcp/handlers/helpers.d.ts.map +1 -0
  36. package/dist/src/mcp/handlers/helpers.js +515 -0
  37. package/dist/src/mcp/handlers/helpers.js.map +1 -0
  38. package/dist/src/mcp/handlers/index.d.ts +6 -0
  39. package/dist/src/mcp/handlers/index.d.ts.map +1 -0
  40. package/dist/src/mcp/handlers/index.js +61 -0
  41. package/dist/src/mcp/handlers/index.js.map +1 -0
  42. package/dist/src/mcp/handlers/media-handlers.d.ts +10 -0
  43. package/dist/src/mcp/handlers/media-handlers.d.ts.map +1 -0
  44. package/dist/src/mcp/handlers/media-handlers.js +535 -0
  45. package/dist/src/mcp/handlers/media-handlers.js.map +1 -0
  46. package/dist/src/mcp/handlers/network.d.ts +147 -0
  47. package/dist/src/mcp/handlers/network.d.ts.map +1 -0
  48. package/dist/src/mcp/handlers/network.js +1135 -0
  49. package/dist/src/mcp/handlers/network.js.map +1 -0
  50. package/dist/src/mcp/handlers/state.d.ts +34 -0
  51. package/dist/src/mcp/handlers/state.d.ts.map +1 -0
  52. package/dist/src/mcp/handlers/state.js +226 -0
  53. package/dist/src/mcp/handlers/state.js.map +1 -0
  54. package/dist/src/mcp/handlers/utility-handlers.d.ts +167 -0
  55. package/dist/src/mcp/handlers/utility-handlers.d.ts.map +1 -0
  56. package/dist/src/mcp/handlers/utility-handlers.js +280 -0
  57. package/dist/src/mcp/handlers/utility-handlers.js.map +1 -0
  58. package/dist/src/mcp/handlers/vision.d.ts +127 -0
  59. package/dist/src/mcp/handlers/vision.d.ts.map +1 -0
  60. package/dist/src/mcp/handlers/vision.js +549 -0
  61. package/dist/src/mcp/handlers/vision.js.map +1 -0
  62. package/dist/src/mcp/index.d.ts +3 -0
  63. package/dist/src/mcp/index.d.ts.map +1 -0
  64. package/dist/src/mcp/index.js +166 -0
  65. package/dist/src/mcp/index.js.map +1 -0
  66. package/dist/src/mcp/server.d.ts +2 -0
  67. package/dist/src/mcp/server.d.ts.map +1 -0
  68. package/dist/src/mcp/server.js +117 -0
  69. package/dist/src/mcp/server.js.map +1 -0
  70. package/dist/src/mcp/tools.d.ts +8 -0
  71. package/dist/src/mcp/tools.d.ts.map +1 -0
  72. package/{src → dist/src}/mcp/tools.js +12 -11
  73. package/dist/src/mcp/tools.js.map +1 -0
  74. package/dist/src/shared/cache-manager.d.ts +80 -0
  75. package/dist/src/shared/cache-manager.d.ts.map +1 -0
  76. package/dist/src/shared/cache-manager.js +221 -0
  77. package/dist/src/shared/cache-manager.js.map +1 -0
  78. package/dist/src/shared/tools.d.ts +2 -0
  79. package/dist/src/shared/tools.d.ts.map +1 -0
  80. package/dist/src/shared/tools.js +606 -0
  81. package/dist/src/shared/tools.js.map +1 -0
  82. package/dist/src/types.d.ts +376 -0
  83. package/dist/src/types.d.ts.map +1 -0
  84. package/dist/src/types.js +9 -0
  85. package/dist/src/types.js.map +1 -0
  86. package/dist/test/cjs/test.d.ts +11 -0
  87. package/dist/test/cjs/test.d.ts.map +1 -0
  88. package/dist/test/cjs/test.js +289 -0
  89. package/dist/test/cjs/test.js.map +1 -0
  90. package/dist/test/mcp/smoke-test.d.ts +29 -0
  91. package/dist/test/mcp/smoke-test.d.ts.map +1 -0
  92. package/dist/test/mcp/smoke-test.js +132 -0
  93. package/dist/test/mcp/smoke-test.js.map +1 -0
  94. package/lib/esm/index.mjs +230 -154
  95. package/lib/esm/module/pageController.mjs +21 -18
  96. package/lib/esm/module/turnstile.mjs +7 -0
  97. package/package.json +25 -16
  98. package/typings.d.ts +7 -1
  99. package/.github/ISSUE_TEMPLATE/general_issue.yaml +0 -58
  100. package/.github/SETUP.md +0 -111
  101. package/.github/workflows/publish.yml +0 -135
  102. package/Dockerfile +0 -79
  103. package/lib/cjs/adblocker.bin +0 -0
  104. package/lib/cjs/index.js +0 -321
  105. package/src/ai/action-parser.js +0 -274
  106. package/src/ai/core.js +0 -378
  107. package/src/ai/element-finder.js +0 -466
  108. package/src/ai/index.js +0 -82
  109. package/src/ai/page-analyzer.js +0 -304
  110. package/src/ai/selector-healer.js +0 -236
  111. package/src/index.js +0 -121
  112. package/src/mcp/handlers.js +0 -5071
  113. package/src/mcp/index.js +0 -190
  114. package/src/mcp/server.js +0 -144
  115. package/src/shared/tools.js +0 -618
  116. package/test/cjs/test.js +0 -259
  117. package/test/esm/package.json +0 -13
  118. package/test/esm/test.js +0 -226
@@ -0,0 +1,549 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.visionHandlers = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs"));
39
+ const state_1 = require("./state");
40
+ const index_1 = require("./index");
41
+ // Auto-generated vision handlers
42
+ exports.visionHandlers = {
43
+ async solve_captcha(params = {}) {
44
+ const { page } = (0, state_1.requireBrowser)();
45
+ const { type = 'auto', timeout = 30000,
46
+ // AI Vision option
47
+ aiMode = true,
48
+ // OCR-specific options
49
+ captchaSelector, inputSelector, refreshSelector, lang = 'eng', expectedLength, allowedChars, maxRetries = 3,
50
+ // iFrame Support
51
+ iframe = null, iframeSelector = null,
52
+ // Accuracy options
53
+ analyzeFirst = true, // Analyze page before solving
54
+ autoRetry = true, // Auto-retry until success
55
+ // MERGED: Form automation options (from form_automator)
56
+ formData, // Form field data to fill
57
+ formSelector, // Form selector (auto-detect if not provided)
58
+ submit = false, // Auto-submit after filling
59
+ humanLike = true, // Human-like typing delays
60
+ aiMatch = true, // AI matches fields even if names differ
61
+ } = params;
62
+ // Resolve target frame
63
+ let targetFrame = page;
64
+ if (iframe !== null && iframe !== undefined) {
65
+ targetFrame = page.frames()[iframe];
66
+ if (!targetFrame)
67
+ return { success: false, error: `Iframe index ${iframe} not found` };
68
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🎯 Targeting iframe index ${iframe}...`);
69
+ }
70
+ else if (iframeSelector) {
71
+ const elementHandle = await page.$(iframeSelector);
72
+ if (elementHandle) {
73
+ targetFrame = (await elementHandle.contentFrame());
74
+ }
75
+ if (!targetFrame)
76
+ return { success: false, error: `Iframe selector ${iframeSelector} not found` };
77
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🎯 Targeting iframe selector ${iframeSelector}...`);
78
+ }
79
+ // ═══════════════════════════════════════════════════════════════
80
+ // STEP 0: FORM AUTOMATION (if formData is provided)
81
+ // ═══════════════════════════════════════════════════════════════
82
+ let formResult = null;
83
+ if (formData && Object.keys(formData).length > 0) {
84
+ (0, state_1.notifyProgress)('solve_captcha', 'started', `📋 Smart Form + Captcha Mode: Filling ${Object.keys(formData).length} fields...`);
85
+ formResult = await index_1.handlers._fillFormFields(page, formData, formSelector, humanLike, aiMatch);
86
+ }
87
+ else {
88
+ (0, state_1.notifyProgress)('solve_captcha', 'started', `🎯 100% Accuracy Mode: Solving ${type} captcha...`);
89
+ }
90
+ // ═══════════════════════════════════════════════════════════════
91
+ // STEP 1: ANALYZE PAGE (if enabled)
92
+ // ═══════════════════════════════════════════════════════════════
93
+ let pageAnalysis = null;
94
+ let detectedCaptchaSelector = captchaSelector;
95
+ let detectedInputSelector = inputSelector;
96
+ if (analyzeFirst) {
97
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🔍 Analyzing page structure...');
98
+ pageAnalysis = await targetFrame.evaluate(() => {
99
+ const result = {
100
+ captchas: [],
101
+ captchaInputs: [],
102
+ forms: [],
103
+ };
104
+ // Find all captcha images
105
+ const captchaSelectors = [
106
+ 'img[src*="captcha"]', 'img[alt*="captcha"]', 'img[id*="captcha"]',
107
+ '.captcha-image', '#captcha_image', '#captchaImg', '.captcha',
108
+ 'img[src*="Captcha"]', 'canvas[id*="captcha"]'
109
+ ];
110
+ captchaSelectors.forEach(sel => {
111
+ document.querySelectorAll(sel).forEach((el) => {
112
+ if (el.offsetParent !== null) { // Visible
113
+ // AI is smart: we don't need hardcoded filters. We just grab candidate images.
114
+ // To avoid grabbing top-header logos, we can just check if the image is inside a form.
115
+ const isInsideForm = el.closest('form') !== null;
116
+ result.captchas.push({
117
+ selector: el.id ? `#${el.id}` : sel,
118
+ src: el.src || null,
119
+ width: el.width,
120
+ height: el.height,
121
+ isInsideForm: isInsideForm
122
+ });
123
+ }
124
+ });
125
+ });
126
+ // Find captcha input fields
127
+ const inputSelectors = [
128
+ 'input[name*="captcha"]', 'input[id*="captcha"]', '#fcaptcha_code',
129
+ 'input[placeholder*="captcha"]', 'input[placeholder*="Enter"]',
130
+ '#captchaInput', '.captcha-input'
131
+ ];
132
+ inputSelectors.forEach(sel => {
133
+ document.querySelectorAll(sel).forEach((el) => {
134
+ if (el.offsetParent !== null && el.type !== 'hidden') {
135
+ result.captchaInputs.push({
136
+ selector: el.id ? `#${el.id}` : (el.name ? `[name="${el.name}"]` : sel),
137
+ placeholder: el.placeholder,
138
+ maxLength: el.maxLength > 0 ? el.maxLength : null,
139
+ });
140
+ }
141
+ });
142
+ });
143
+ // Find forms
144
+ document.querySelectorAll('form').forEach(form => {
145
+ const hasCaptcha = form.querySelector('img[src*="captcha"], input[name*="captcha"]');
146
+ if (hasCaptcha) {
147
+ result.forms.push({
148
+ id: form.id || null,
149
+ action: form.action,
150
+ submitBtn: form.querySelector('button[type="submit"], input[type="submit"]')?.id || null,
151
+ });
152
+ }
153
+ });
154
+ return result;
155
+ });
156
+ // Auto-detect selectors if not provided
157
+ if (!captchaSelector && pageAnalysis.captchas.length > 0) {
158
+ detectedCaptchaSelector = pageAnalysis.captchas[0].selector;
159
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📍 Auto-detected captcha: ${detectedCaptchaSelector}`);
160
+ }
161
+ if (!inputSelector && pageAnalysis.captchaInputs.length > 0) {
162
+ detectedInputSelector = pageAnalysis.captchaInputs[0].selector;
163
+ // Auto-detect expected length from maxLength
164
+ if (!expectedLength && pageAnalysis.captchaInputs[0].maxLength) {
165
+ params.expectedLength = pageAnalysis.captchaInputs[0].maxLength;
166
+ }
167
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📍 Auto-detected input: ${detectedInputSelector}`);
168
+ }
169
+ }
170
+ // Handle text/image captcha with OCR/Vision
171
+ if (type === 'text' || type === 'image' || (type === 'auto' && detectedCaptchaSelector)) {
172
+ if (!detectedCaptchaSelector) {
173
+ return { success: false, error: 'captchaSelector not provided and could not auto-detect' };
174
+ }
175
+ const effectiveMaxRetries = autoRetry ? maxRetries : 1;
176
+ for (let attempt = 1; attempt <= effectiveMaxRetries; attempt++) {
177
+ try {
178
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📸 Capturing CAPTCHA image... (attempt ${attempt}/${effectiveMaxRetries})`);
179
+ // If retrying, refresh captcha first
180
+ if (attempt > 1 && refreshSelector) {
181
+ try {
182
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🔄 Refreshing CAPTCHA...');
183
+ await targetFrame.click(refreshSelector);
184
+ await new Promise(r => setTimeout(r, 1500));
185
+ }
186
+ catch (refreshErr) {
187
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ Could not refresh captcha: ${refreshErr.message}`);
188
+ }
189
+ }
190
+ let targetHandle = null;
191
+ // 1. SMART AI CONTEXT: Try to capture the form container so AI sees the full context
192
+ if (detectedInputSelector) {
193
+ try {
194
+ const containerHandle = await targetFrame.evaluateHandle((sel) => {
195
+ const input = document.querySelector(sel);
196
+ if (!input)
197
+ return null;
198
+ return input.closest('form') || input.closest('div.captcha-wrapper') || input.parentElement?.parentElement || input.parentElement;
199
+ }, detectedInputSelector);
200
+ if (containerHandle && await containerHandle.evaluate((n) => n !== null)) {
201
+ targetHandle = containerHandle.asElement();
202
+ }
203
+ }
204
+ catch (e) { }
205
+ }
206
+ // 2. Fallback to just the captcha image if no container found
207
+ if (!targetHandle && detectedCaptchaSelector) {
208
+ try {
209
+ targetHandle = await targetFrame.waitForSelector(detectedCaptchaSelector, { timeout: 5000 });
210
+ }
211
+ catch (e) { }
212
+ }
213
+ if (!targetHandle) {
214
+ return { success: false, error: 'Could not find elements to capture' };
215
+ }
216
+ // Scroll into view
217
+ await targetHandle.evaluate((el) => el.scrollIntoView({ behavior: 'smooth', block: 'center' }));
218
+ await new Promise(r => setTimeout(r, 500));
219
+ // Take base64 screenshot of just the captcha image for Vision API
220
+ let captchaImageBase64 = null;
221
+ try {
222
+ const captchaEl = await targetFrame.$(detectedCaptchaSelector);
223
+ if (captchaEl) {
224
+ captchaImageBase64 = (await captchaEl.screenshot()).toString('base64');
225
+ }
226
+ }
227
+ catch (e) { }
228
+ // Take full context screenshot for host LLM fallback
229
+ const screenshotBase64 = (await targetHandle.screenshot()).toString('base64');
230
+ // ═══════════════════════════════════════════════════════════
231
+ // STEP A: Server-Side Vision API (if aiMode enabled)
232
+ // ═══════════════════════════════════════════════════════════
233
+ if (aiMode) {
234
+ const imageForApi = captchaImageBase64 || screenshotBase64;
235
+ const langHint = lang !== 'eng' ? ` The text may be in ${lang === 'hin' ? 'Hindi' : lang} language.` : '';
236
+ const captchaText = await index_1.handlers._solveWithVisionAPI(imageForApi, langHint);
237
+ if (captchaText) {
238
+ // Validate response against expected constraints
239
+ const validation = index_1.handlers._validateCaptchaText(captchaText, expectedLength, allowedChars);
240
+ if (!validation.valid) {
241
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ Validation failed: ${validation.reason} — "${captchaText}"`);
242
+ if (attempt < effectiveMaxRetries)
243
+ continue;
244
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ Last attempt, using unvalidated text: "${captchaText}"`);
245
+ }
246
+ if (detectedInputSelector) {
247
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🤖 Vision API solved: "${captchaText}" → typing...`);
248
+ // Clear existing value and type the answer
249
+ await targetFrame.evaluate((sel) => {
250
+ const el = document.querySelector(sel);
251
+ if (el) {
252
+ el.value = '';
253
+ el.focus();
254
+ }
255
+ }, detectedInputSelector);
256
+ await targetFrame.type(detectedInputSelector, captchaText, { delay: 80 });
257
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `✅ CAPTCHA filled: "${captchaText}"`);
258
+ let submitResult = null;
259
+ if (submit) {
260
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🚀 Auto-submitting form...');
261
+ submitResult = await index_1.handlers._submitForm(targetFrame);
262
+ // Check if submit detected captcha errors → retry
263
+ if (submitResult && !submitResult.success && submitResult.needsRetry && autoRetry && attempt < effectiveMaxRetries) {
264
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `❌ Captcha appears wrong, retrying... (${attempt}/${effectiveMaxRetries})`);
265
+ continue;
266
+ }
267
+ }
268
+ (0, state_1.notifyProgress)('solve_captcha', 'completed', '🎉 CAPTCHA solved and filled automatically!');
269
+ return {
270
+ success: true,
271
+ solved: true,
272
+ method: 'vision_api',
273
+ captchaText,
274
+ attempt,
275
+ formResult,
276
+ submitted: submit ? (submitResult?.success || false) : undefined
277
+ };
278
+ }
279
+ }
280
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ Vision API could not solve (attempt ${attempt}/${effectiveMaxRetries})`);
281
+ if (attempt < effectiveMaxRetries)
282
+ continue;
283
+ }
284
+ // ═══════════════════════════════════════════════════════════
285
+ // STEP B: Fallback → Send image to Host LLM
286
+ // ═══════════════════════════════════════════════════════════
287
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', aiMode
288
+ ? '📤 All Vision API attempts failed — sending image to host LLM...'
289
+ : '📤 AI Vision disabled — sending image to host LLM...');
290
+ const instructions = `[ACTION REQUIRED: VISION AI CAPTCHA SOLVER]\n\nI have successfully captured the CAPTCHA image (see attached).\n\n1. Please use your Vision capabilities to carefully read the text/characters in the image.\n2. Once you have the text, use the \`type\` tool with selector \`${detectedInputSelector || '<input_selector>'}\` to fill in the answer.\n3. If submit was requested (${submit ? 'YES' : 'NO'}), please submit the form after typing the answer.\n\nNote: Do NOT call \`solve_captcha\` again for this specific captcha, as you have already received the image.`;
291
+ return {
292
+ success: true,
293
+ mcpContent: [
294
+ { type: 'text', text: instructions },
295
+ { type: 'image', data: screenshotBase64, mimeType: 'image/png' }
296
+ ]
297
+ };
298
+ }
299
+ catch (err) {
300
+ (0, state_1.notifyProgress)('solve_captcha', 'error', `Vision capture error (attempt ${attempt}): ${err.message}`);
301
+ if (attempt >= effectiveMaxRetries) {
302
+ return { success: false, error: err.message, type: 'vision_capture', formResult };
303
+ }
304
+ }
305
+ }
306
+ return { success: false, error: 'All captcha solving attempts exhausted', formResult };
307
+ }
308
+ // Original Turnstile/reCAPTCHA/hCaptcha handling
309
+ const start = Date.now();
310
+ let attempts = 0;
311
+ while (Date.now() - start < timeout) {
312
+ attempts++;
313
+ const turnstileToken = await page.evaluate(() => {
314
+ const input = document.querySelector('input[name="cf-turnstile-response"]');
315
+ return input ? input.value : null;
316
+ });
317
+ if (turnstileToken) {
318
+ (0, state_1.notifyProgress)('solve_captcha', 'completed', `Captcha solved after ${attempts} checks`, { type: 'turnstile', attempts });
319
+ // MERGED: Handle form submission if requested
320
+ if (submit) {
321
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🚀 Submitting form...');
322
+ const submitResult = await index_1.handlers._submitForm(page);
323
+ return {
324
+ success: true,
325
+ type: 'turnstile',
326
+ solved: true,
327
+ formResult,
328
+ submitted: submitResult.success,
329
+ submitMessage: submitResult.message
330
+ };
331
+ }
332
+ return { success: true, type: 'turnstile', solved: true, formResult };
333
+ }
334
+ if (attempts % 10 === 0) {
335
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `Still solving... (${attempts} checks)`, { attempts });
336
+ }
337
+ await new Promise(r => setTimeout(r, 500));
338
+ }
339
+ (0, state_1.notifyProgress)('solve_captcha', 'error', 'Captcha solving timeout');
340
+ return { success: false, error: 'Captcha solving timeout', formResult };
341
+ },
342
+ async see_page(params = {}) {
343
+ const { page } = (0, state_1.requireBrowser)();
344
+ const { fullPage = false, format = 'jpeg', quality = 70, includeElements = true, annotate = false, includeDomText = false, maxElements = 60, path: savePath } = params;
345
+ (0, state_1.notifyProgress)('see_page', 'started', `👁️ Looking at the page (${fullPage ? 'full page' : 'viewport'})${annotate ? ' with Super Annotations' : ''}...`);
346
+ let elements = [];
347
+ let pageInfo = {};
348
+ // 1. Build a "visual map" of visible interactive elements (what a human can act on)
349
+ // If annotate=true, this also injects visual bounding boxes into the DOM
350
+ if (includeElements || annotate) {
351
+ const data = await page.evaluate(({ maxEls, isFullPage, doAnnotate }) => {
352
+ const out = [];
353
+ const seen = new Set();
354
+ const sel = 'a[href], button, input, select, textarea, [role="button"], [role="link"], [onclick], [tabindex]';
355
+ const nodes = document.querySelectorAll(sel);
356
+ const cssPath = (el) => {
357
+ if (el.id)
358
+ return `#${CSS.escape(el.id)}`;
359
+ if (el.name)
360
+ return `${el.tagName.toLowerCase()}[name="${el.name}"]`;
361
+ const parts = [];
362
+ let node = el;
363
+ while (node && node.nodeType === 1 && parts.length < 4) {
364
+ let part = node.tagName.toLowerCase();
365
+ if (node.classList.length) {
366
+ const cls = Array.from(node.classList).slice(0, 2).map((c) => '.' + CSS.escape(c)).join('');
367
+ part += cls;
368
+ }
369
+ const parent = node.parentElement;
370
+ if (parent) {
371
+ const sibs = Array.from(parent.children).filter((c) => c.tagName === node.tagName);
372
+ if (sibs.length > 1)
373
+ part += `:nth-of-type(${sibs.indexOf(node) + 1})`;
374
+ }
375
+ parts.unshift(part);
376
+ node = node.parentElement;
377
+ }
378
+ return parts.join(' > ');
379
+ };
380
+ let elementIdCounter = 1;
381
+ const boxesToInject = [];
382
+ for (const el of nodes) {
383
+ if (out.length >= maxEls)
384
+ break;
385
+ const rect = el.getBoundingClientRect();
386
+ // Only elements actually visible on screen
387
+ if (rect.width < 2 || rect.height < 2)
388
+ continue;
389
+ const style = window.getComputedStyle(el);
390
+ if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0')
391
+ continue;
392
+ if (!isFullPage) {
393
+ if (rect.bottom < 0 || rect.right < 0 || rect.top > window.innerHeight || rect.left > window.innerWidth) {
394
+ // outside current viewport — skip (we report what is seen)
395
+ continue;
396
+ }
397
+ }
398
+ const tag = el.tagName.toLowerCase();
399
+ let label = (el.innerText || el.value || el.getAttribute('aria-label') || el.getAttribute('placeholder') || el.getAttribute('title') || el.getAttribute('alt') || '').trim().replace(/\s+/g, ' ').slice(0, 80);
400
+ let kind = tag;
401
+ if (tag === 'a')
402
+ kind = 'link';
403
+ else if (tag === 'button' || el.getAttribute('role') === 'button')
404
+ kind = 'button';
405
+ else if (tag === 'input')
406
+ kind = `input:${el.type || 'text'}`;
407
+ else if (tag === 'select')
408
+ kind = 'select';
409
+ else if (tag === 'textarea')
410
+ kind = 'textarea';
411
+ const selector = cssPath(el);
412
+ if (seen.has(selector + '|' + label))
413
+ continue;
414
+ seen.add(selector + '|' + label);
415
+ const annotationId = elementIdCounter++;
416
+ if (doAnnotate) {
417
+ boxesToInject.push({ id: annotationId, rect, tag: kind });
418
+ }
419
+ out.push({
420
+ id: annotationId,
421
+ kind,
422
+ text: label,
423
+ selector,
424
+ href: tag === 'a' ? el.href : undefined,
425
+ box: { x: Math.round(rect.x), y: Math.round(rect.y), w: Math.round(rect.width), h: Math.round(rect.height) }
426
+ });
427
+ }
428
+ // Inject the boxes into the DOM
429
+ if (doAnnotate && boxesToInject.length > 0) {
430
+ let container = document.getElementById('real-browser-annotations');
431
+ if (container)
432
+ container.remove();
433
+ container = document.createElement('div');
434
+ container.id = 'real-browser-annotations';
435
+ // Ensure container sits exactly on top of the document without affecting layout
436
+ container.style.position = 'absolute';
437
+ container.style.top = '0';
438
+ container.style.left = '0';
439
+ container.style.width = '100%';
440
+ container.style.height = '100%';
441
+ container.style.pointerEvents = 'none';
442
+ container.style.zIndex = '2147483647'; // Max z-index
443
+ for (const box of boxesToInject) {
444
+ // Adjust box coordinates by scroll position because container is absolute (document relative)
445
+ const absoluteY = box.rect.y + window.scrollY;
446
+ const absoluteX = box.rect.x + window.scrollX;
447
+ const div = document.createElement('div');
448
+ div.style.position = 'absolute';
449
+ div.style.border = '2px solid red';
450
+ div.style.backgroundColor = 'rgba(255, 0, 0, 0.1)';
451
+ div.style.left = absoluteX + 'px';
452
+ div.style.top = absoluteY + 'px';
453
+ div.style.width = box.rect.width + 'px';
454
+ div.style.height = box.rect.height + 'px';
455
+ div.style.boxSizing = 'border-box';
456
+ const label = document.createElement('div');
457
+ label.innerText = String(box.id);
458
+ label.style.position = 'absolute';
459
+ label.style.top = '-2px';
460
+ label.style.left = '-2px';
461
+ label.style.backgroundColor = 'red';
462
+ label.style.color = 'white';
463
+ label.style.fontSize = '12px';
464
+ label.style.fontWeight = 'bold';
465
+ label.style.padding = '1px 4px';
466
+ label.style.fontFamily = 'monospace';
467
+ label.style.borderBottomRightRadius = '4px';
468
+ div.appendChild(label);
469
+ container.appendChild(div);
470
+ }
471
+ document.body.appendChild(container);
472
+ }
473
+ return {
474
+ elements: out,
475
+ info: {
476
+ title: document.title,
477
+ url: location.href,
478
+ viewport: { width: window.innerWidth, height: window.innerHeight },
479
+ scrollY: Math.round(window.scrollY),
480
+ scrollHeight: document.body ? document.body.scrollHeight : 0
481
+ }
482
+ };
483
+ }, { maxEls: maxElements, isFullPage: fullPage, doAnnotate: annotate }).catch((e) => { console.error(e); return { elements: [], info: {} }; });
484
+ elements = data.elements || [];
485
+ pageInfo = data.info || {};
486
+ // Save elements to state for quick annotation ID mapping
487
+ state_1.state.activeAnnotations = {};
488
+ for (const el of elements) {
489
+ state_1.state.activeAnnotations[el.id] = { selector: el.selector, text: el.text, type: el.kind };
490
+ }
491
+ }
492
+ // 2. Capture what the page looks like (with annotations if injected)
493
+ const shotOpts = { type: format, fullPage };
494
+ if (format === 'jpeg' && typeof quality === 'number')
495
+ shotOpts.quality = quality;
496
+ let buffer;
497
+ try {
498
+ buffer = await page.screenshot(shotOpts);
499
+ }
500
+ catch (e) {
501
+ return { success: false, error: `Vision capture failed: ${e.message}` };
502
+ }
503
+ // 2.1 Cleanup annotations if we injected them
504
+ if (annotate) {
505
+ await page.evaluate(() => {
506
+ const container = document.getElementById('real-browser-annotations');
507
+ if (container)
508
+ container.remove();
509
+ }).catch(() => { });
510
+ }
511
+ let domText = undefined;
512
+ if (includeDomText) {
513
+ domText = await page.evaluate(() => {
514
+ return document.body ? document.body.innerText : '';
515
+ }).catch(() => '');
516
+ }
517
+ // 3. Optionally save the image too
518
+ let savedTo = null;
519
+ if (savePath) {
520
+ const dir = path.dirname(savePath);
521
+ if (dir && !fs.existsSync(dir))
522
+ fs.mkdirSync(dir, { recursive: true });
523
+ fs.writeFileSync(savePath, buffer);
524
+ savedTo = savePath;
525
+ }
526
+ (0, state_1.notifyProgress)('see_page', 'completed', `👁️ Saw the page: ${elements.length} interactive elements visible${savedTo ? ' (saved ' + savedTo + ')' : ''}`);
527
+ const base64 = Buffer.from(buffer).toString('base64');
528
+ const summary = {
529
+ success: true,
530
+ url: pageInfo.url || page.url(),
531
+ title: pageInfo.title,
532
+ viewport: pageInfo.viewport,
533
+ scroll: { y: pageInfo.scrollY, pageHeight: pageInfo.scrollHeight },
534
+ visibleInteractiveElements: elements.length,
535
+ domText,
536
+ elements,
537
+ savedTo
538
+ };
539
+ // Return BOTH the actual image (so the AI literally "sees" it) and the visual map text
540
+ return {
541
+ mcpContent: [
542
+ { type: 'image', data: base64, mimeType: format === 'jpeg' ? 'image/jpeg' : 'image/png' },
543
+ { type: 'text', text: JSON.stringify(summary, null, 2) }
544
+ ],
545
+ ...summary
546
+ };
547
+ }
548
+ };
549
+ //# sourceMappingURL=vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/vision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":";AA+LA,OAAO,EAAE,CAAA"}