@natchs/browser-mcp 2.0.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.
- package/README.md +141 -0
- package/dist/core/auth.d.ts +7 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +23 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/cache.d.ts +24 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +67 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/config.d.ts +362 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +281 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +38 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +19 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/errors.d.ts +82 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +98 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +41 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/metrics.d.ts +24 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +59 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/network-capture.d.ts +117 -0
- package/dist/core/network-capture.d.ts.map +1 -0
- package/dist/core/network-capture.js +349 -0
- package/dist/core/network-capture.js.map +1 -0
- package/dist/core/network-export.d.ts +6 -0
- package/dist/core/network-export.d.ts.map +1 -0
- package/dist/core/network-export.js +163 -0
- package/dist/core/network-export.js.map +1 -0
- package/dist/core/output.d.ts +66 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +114 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/pipeline.d.ts +25 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +52 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/plugin.d.ts +26 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +49 -0
- package/dist/core/plugin.js.map +1 -0
- package/dist/core/rate-limit.d.ts +33 -0
- package/dist/core/rate-limit.d.ts.map +1 -0
- package/dist/core/rate-limit.js +89 -0
- package/dist/core/rate-limit.js.map +1 -0
- package/dist/core/registry.d.ts +67 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +270 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/sandbox.d.ts +20 -0
- package/dist/core/sandbox.d.ts.map +1 -0
- package/dist/core/sandbox.js +168 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/schema-gen.d.ts +5 -0
- package/dist/core/schema-gen.d.ts.map +1 -0
- package/dist/core/schema-gen.js +115 -0
- package/dist/core/schema-gen.js.map +1 -0
- package/dist/core/session.d.ts +88 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +300 -0
- package/dist/core/session.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +192 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +11 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +121 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/tools/admin/cache.d.ts +7 -0
- package/dist/tools/admin/cache.d.ts.map +1 -0
- package/dist/tools/admin/cache.js +27 -0
- package/dist/tools/admin/cache.js.map +1 -0
- package/dist/tools/admin/index.d.ts +3 -0
- package/dist/tools/admin/index.d.ts.map +1 -0
- package/dist/tools/admin/index.js +9 -0
- package/dist/tools/admin/index.js.map +1 -0
- package/dist/tools/admin/server-status.d.ts +14 -0
- package/dist/tools/admin/server-status.d.ts.map +1 -0
- package/dist/tools/admin/server-status.js +33 -0
- package/dist/tools/admin/server-status.js.map +1 -0
- package/dist/tools/browser/cookies.d.ts +46 -0
- package/dist/tools/browser/cookies.d.ts.map +1 -0
- package/dist/tools/browser/cookies.js +65 -0
- package/dist/tools/browser/cookies.js.map +1 -0
- package/dist/tools/browser/evaluate.d.ts +12 -0
- package/dist/tools/browser/evaluate.d.ts.map +1 -0
- package/dist/tools/browser/evaluate.js +61 -0
- package/dist/tools/browser/evaluate.js.map +1 -0
- package/dist/tools/browser/index.d.ts +3 -0
- package/dist/tools/browser/index.d.ts.map +1 -0
- package/dist/tools/browser/index.js +17 -0
- package/dist/tools/browser/index.js.map +1 -0
- package/dist/tools/browser/page-info.d.ts +6 -0
- package/dist/tools/browser/page-info.d.ts.map +1 -0
- package/dist/tools/browser/page-info.js +25 -0
- package/dist/tools/browser/page-info.js.map +1 -0
- package/dist/tools/browser/pdf.d.ts +45 -0
- package/dist/tools/browser/pdf.d.ts.map +1 -0
- package/dist/tools/browser/pdf.js +57 -0
- package/dist/tools/browser/pdf.js.map +1 -0
- package/dist/tools/browser/screenshot.d.ts +21 -0
- package/dist/tools/browser/screenshot.d.ts.map +1 -0
- package/dist/tools/browser/screenshot.js +41 -0
- package/dist/tools/browser/screenshot.js.map +1 -0
- package/dist/tools/extraction/extract-css.d.ts +33 -0
- package/dist/tools/extraction/extract-css.d.ts.map +1 -0
- package/dist/tools/extraction/extract-css.js +112 -0
- package/dist/tools/extraction/extract-css.js.map +1 -0
- package/dist/tools/extraction/extract.d.ts +10 -0
- package/dist/tools/extraction/extract.d.ts.map +1 -0
- package/dist/tools/extraction/extract.js +71 -0
- package/dist/tools/extraction/extract.js.map +1 -0
- package/dist/tools/extraction/index.d.ts +3 -0
- package/dist/tools/extraction/index.d.ts.map +1 -0
- package/dist/tools/extraction/index.js +17 -0
- package/dist/tools/extraction/index.js.map +1 -0
- package/dist/tools/interaction/click.d.ts +15 -0
- package/dist/tools/interaction/click.d.ts.map +1 -0
- package/dist/tools/interaction/click.js +31 -0
- package/dist/tools/interaction/click.js.map +1 -0
- package/dist/tools/interaction/drag.d.ts +18 -0
- package/dist/tools/interaction/drag.d.ts.map +1 -0
- package/dist/tools/interaction/drag.js +27 -0
- package/dist/tools/interaction/drag.js.map +1 -0
- package/dist/tools/interaction/file-upload.d.ts +18 -0
- package/dist/tools/interaction/file-upload.d.ts.map +1 -0
- package/dist/tools/interaction/file-upload.js +37 -0
- package/dist/tools/interaction/file-upload.js.map +1 -0
- package/dist/tools/interaction/fill.d.ts +18 -0
- package/dist/tools/interaction/fill.d.ts.map +1 -0
- package/dist/tools/interaction/fill.js +34 -0
- package/dist/tools/interaction/fill.js.map +1 -0
- package/dist/tools/interaction/hover.d.ts +15 -0
- package/dist/tools/interaction/hover.d.ts.map +1 -0
- package/dist/tools/interaction/hover.js +26 -0
- package/dist/tools/interaction/hover.js.map +1 -0
- package/dist/tools/interaction/index.d.ts +3 -0
- package/dist/tools/interaction/index.d.ts.map +1 -0
- package/dist/tools/interaction/index.js +19 -0
- package/dist/tools/interaction/index.js.map +1 -0
- package/dist/tools/interaction/press-key.d.ts +12 -0
- package/dist/tools/interaction/press-key.d.ts.map +1 -0
- package/dist/tools/interaction/press-key.js +24 -0
- package/dist/tools/interaction/press-key.js.map +1 -0
- package/dist/tools/interaction/select.d.ts +18 -0
- package/dist/tools/interaction/select.d.ts.map +1 -0
- package/dist/tools/interaction/select.js +28 -0
- package/dist/tools/interaction/select.js.map +1 -0
- package/dist/tools/interaction/type.d.ts +21 -0
- package/dist/tools/interaction/type.d.ts.map +1 -0
- package/dist/tools/interaction/type.js +30 -0
- package/dist/tools/interaction/type.js.map +1 -0
- package/dist/tools/navigation/back.d.ts +6 -0
- package/dist/tools/navigation/back.d.ts.map +1 -0
- package/dist/tools/navigation/back.js +16 -0
- package/dist/tools/navigation/back.js.map +1 -0
- package/dist/tools/navigation/forward.d.ts +6 -0
- package/dist/tools/navigation/forward.d.ts.map +1 -0
- package/dist/tools/navigation/forward.js +16 -0
- package/dist/tools/navigation/forward.js.map +1 -0
- package/dist/tools/navigation/index.d.ts +3 -0
- package/dist/tools/navigation/index.d.ts.map +1 -0
- package/dist/tools/navigation/index.js +13 -0
- package/dist/tools/navigation/index.js.map +1 -0
- package/dist/tools/navigation/navigate.d.ts +19 -0
- package/dist/tools/navigation/navigate.d.ts.map +1 -0
- package/dist/tools/navigation/navigate.js +52 -0
- package/dist/tools/navigation/navigate.js.map +1 -0
- package/dist/tools/navigation/refresh.d.ts +15 -0
- package/dist/tools/navigation/refresh.d.ts.map +1 -0
- package/dist/tools/navigation/refresh.js +26 -0
- package/dist/tools/navigation/refresh.js.map +1 -0
- package/dist/tools/navigation/wait-for.d.ts +12 -0
- package/dist/tools/navigation/wait-for.d.ts.map +1 -0
- package/dist/tools/navigation/wait-for.js +23 -0
- package/dist/tools/navigation/wait-for.js.map +1 -0
- package/dist/tools/network/console.d.ts +17 -0
- package/dist/tools/network/console.d.ts.map +1 -0
- package/dist/tools/network/console.js +29 -0
- package/dist/tools/network/console.js.map +1 -0
- package/dist/tools/network/dialog.d.ts +14 -0
- package/dist/tools/network/dialog.d.ts.map +1 -0
- package/dist/tools/network/dialog.js +34 -0
- package/dist/tools/network/dialog.js.map +1 -0
- package/dist/tools/network/index.d.ts +3 -0
- package/dist/tools/network/index.d.ts.map +1 -0
- package/dist/tools/network/index.js +21 -0
- package/dist/tools/network/index.js.map +1 -0
- package/dist/tools/network/network-clear.d.ts +11 -0
- package/dist/tools/network/network-clear.d.ts.map +1 -0
- package/dist/tools/network/network-clear.js +24 -0
- package/dist/tools/network/network-clear.js.map +1 -0
- package/dist/tools/network/network-entries.d.ts +35 -0
- package/dist/tools/network/network-entries.d.ts.map +1 -0
- package/dist/tools/network/network-entries.js +73 -0
- package/dist/tools/network/network-entries.js.map +1 -0
- package/dist/tools/network/network-export.d.ts +14 -0
- package/dist/tools/network/network-export.d.ts.map +1 -0
- package/dist/tools/network/network-export.js +24 -0
- package/dist/tools/network/network-export.js.map +1 -0
- package/dist/tools/network/network-requests.d.ts +20 -0
- package/dist/tools/network/network-requests.d.ts.map +1 -0
- package/dist/tools/network/network-requests.js +36 -0
- package/dist/tools/network/network-requests.js.map +1 -0
- package/dist/tools/network/network-response.d.ts +14 -0
- package/dist/tools/network/network-response.d.ts.map +1 -0
- package/dist/tools/network/network-response.js +56 -0
- package/dist/tools/network/network-response.js.map +1 -0
- package/dist/tools/network/wait-nav.d.ts +15 -0
- package/dist/tools/network/wait-nav.d.ts.map +1 -0
- package/dist/tools/network/wait-nav.js +26 -0
- package/dist/tools/network/wait-nav.js.map +1 -0
- package/dist/tools/network/websocket-frames.d.ts +17 -0
- package/dist/tools/network/websocket-frames.d.ts.map +1 -0
- package/dist/tools/network/websocket-frames.js +24 -0
- package/dist/tools/network/websocket-frames.js.map +1 -0
- package/dist/tools/re/api-discover.d.ts +11 -0
- package/dist/tools/re/api-discover.d.ts.map +1 -0
- package/dist/tools/re/api-discover.js +57 -0
- package/dist/tools/re/api-discover.js.map +1 -0
- package/dist/tools/re/auth-analyze.d.ts +11 -0
- package/dist/tools/re/auth-analyze.d.ts.map +1 -0
- package/dist/tools/re/auth-analyze.js +86 -0
- package/dist/tools/re/auth-analyze.js.map +1 -0
- package/dist/tools/re/index.d.ts +3 -0
- package/dist/tools/re/index.d.ts.map +1 -0
- package/dist/tools/re/index.js +11 -0
- package/dist/tools/re/index.js.map +1 -0
- package/dist/tools/re/js-beautify.d.ts +14 -0
- package/dist/tools/re/js-beautify.d.ts.map +1 -0
- package/dist/tools/re/js-beautify.js +132 -0
- package/dist/tools/re/js-beautify.js.map +1 -0
- package/dist/tools/re/js-deobfuscate.d.ts +11 -0
- package/dist/tools/re/js-deobfuscate.d.ts.map +1 -0
- package/dist/tools/re/js-deobfuscate.js +96 -0
- package/dist/tools/re/js-deobfuscate.js.map +1 -0
- package/dist/tools/session/close.d.ts +11 -0
- package/dist/tools/session/close.d.ts.map +1 -0
- package/dist/tools/session/close.js +24 -0
- package/dist/tools/session/close.js.map +1 -0
- package/dist/tools/session/index.d.ts +3 -0
- package/dist/tools/session/index.d.ts.map +1 -0
- package/dist/tools/session/index.js +9 -0
- package/dist/tools/session/index.js.map +1 -0
- package/dist/tools/session/list.d.ts +14 -0
- package/dist/tools/session/list.d.ts.map +1 -0
- package/dist/tools/session/list.js +26 -0
- package/dist/tools/session/list.js.map +1 -0
- package/dist/tools/session/open.d.ts +11 -0
- package/dist/tools/session/open.d.ts.map +1 -0
- package/dist/tools/session/open.js +25 -0
- package/dist/tools/session/open.js.map +1 -0
- package/dist/tools/stealth/fingerprint.d.ts +11 -0
- package/dist/tools/stealth/fingerprint.d.ts.map +1 -0
- package/dist/tools/stealth/fingerprint.js +72 -0
- package/dist/tools/stealth/fingerprint.js.map +1 -0
- package/dist/tools/stealth/human-behavior.d.ts +29 -0
- package/dist/tools/stealth/human-behavior.d.ts.map +1 -0
- package/dist/tools/stealth/human-behavior.js +86 -0
- package/dist/tools/stealth/human-behavior.js.map +1 -0
- package/dist/tools/stealth/index.d.ts +3 -0
- package/dist/tools/stealth/index.d.ts.map +1 -0
- package/dist/tools/stealth/index.js +7 -0
- package/dist/tools/stealth/index.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
|
+
const RESULT_MAX_LENGTH = 10_000;
|
|
6
|
+
const EVAL_TIMEOUT = 10_000;
|
|
7
|
+
function wrapSandboxedCode(code) {
|
|
8
|
+
return `(() => { "use strict";
|
|
9
|
+
const process = undefined;
|
|
10
|
+
const require = undefined;
|
|
11
|
+
const __dirname = undefined;
|
|
12
|
+
const __filename = undefined;
|
|
13
|
+
const global = globalThis;
|
|
14
|
+
const console = undefined;
|
|
15
|
+
try { return ${code}; } catch(e) { return { __sandbox_error: e instanceof Error ? e.message : String(e) }; }
|
|
16
|
+
})()`;
|
|
17
|
+
}
|
|
18
|
+
export const EvaluateArgs = z.object({
|
|
19
|
+
code: z.string().min(1).max(10000),
|
|
20
|
+
});
|
|
21
|
+
export const evaluateHandler = async (args, ctx) => {
|
|
22
|
+
const parsed = EvaluateArgs.safeParse(args);
|
|
23
|
+
if (!parsed.success)
|
|
24
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
25
|
+
const { code } = parsed.data;
|
|
26
|
+
const SANDBOX_ESCAPE_PATTERNS = [
|
|
27
|
+
/constructor\s*[.(]/i,
|
|
28
|
+
/Function\s*\(/i,
|
|
29
|
+
/\beval\s*\(/i,
|
|
30
|
+
];
|
|
31
|
+
for (const pattern of SANDBOX_ESCAPE_PATTERNS) {
|
|
32
|
+
if (pattern.test(code)) {
|
|
33
|
+
return errorResult(ErrorCode.URL_BLOCKED, 'Code contains potentially unsafe patterns');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const safeCode = sanitizeInput(code);
|
|
37
|
+
if (safeCode.blocked) {
|
|
38
|
+
return errorResult(ErrorCode.URL_BLOCKED, 'Input contains potentially unsafe characters');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const page = await ctx.getPage();
|
|
42
|
+
const sandboxedCode = wrapSandboxedCode(safeCode.sanitized);
|
|
43
|
+
const result = await Promise.race([
|
|
44
|
+
page.evaluate(sandboxedCode),
|
|
45
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Evaluation timed out')), EVAL_TIMEOUT)),
|
|
46
|
+
]);
|
|
47
|
+
if (result && typeof result === 'object' && '__sandbox_error' in result) {
|
|
48
|
+
return errorResult(ErrorCode.EVALUATE_ERROR, result.__sandbox_error);
|
|
49
|
+
}
|
|
50
|
+
const truncated = typeof result === 'string' && result.length > RESULT_MAX_LENGTH;
|
|
51
|
+
return okResult({
|
|
52
|
+
result: truncated ? result.substring(0, RESULT_MAX_LENGTH) : result,
|
|
53
|
+
truncated: truncated || undefined,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
58
|
+
return errorResult(ErrorCode.EVALUATE_FAILED, message);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/tools/browser/evaluate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAS3D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CA6BjE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { screenshotHandler, ScreenshotArgs } from './screenshot.js';
|
|
2
|
+
import { pageInfoHandler, PageInfoArgs } from './page-info.js';
|
|
3
|
+
import { getCookiesHandler, GetCookiesArgs } from './cookies.js';
|
|
4
|
+
import { setCookieHandler, SetCookieArgs } from './cookies.js';
|
|
5
|
+
import { deleteCookieHandler, DeleteCookiesArgs } from './cookies.js';
|
|
6
|
+
import { evaluateHandler, EvaluateArgs } from './evaluate.js';
|
|
7
|
+
import { pdfHandler, PdfArgs } from './pdf.js';
|
|
8
|
+
export function registerBrowserTools(registry) {
|
|
9
|
+
registry.register({ name: 'browser_screenshot', description: 'Take a screenshot of the page or a specific element', category: 'browser', schema: ScreenshotArgs }, screenshotHandler);
|
|
10
|
+
registry.register({ name: 'browser_page_info', description: 'Get current page information (title, URL, viewport)', category: 'browser', schema: PageInfoArgs }, pageInfoHandler);
|
|
11
|
+
registry.register({ name: 'browser_get_cookies', description: 'Get all cookies for the current page', category: 'browser', schema: GetCookiesArgs }, getCookiesHandler);
|
|
12
|
+
registry.register({ name: 'browser_set_cookie', description: 'Set a cookie', category: 'browser', schema: SetCookieArgs }, setCookieHandler);
|
|
13
|
+
registry.register({ name: 'browser_delete_cookie', description: 'Delete a cookie by name', category: 'browser', schema: DeleteCookiesArgs }, deleteCookieHandler);
|
|
14
|
+
registry.register({ name: 'browser_evaluate', description: 'Execute JavaScript in the page context', category: 'browser', schema: EvaluateArgs }, evaluateHandler);
|
|
15
|
+
registry.register({ name: 'browser_pdf', description: 'Generate a PDF of the current page', category: 'browser', schema: PdfArgs }, pdfHandler);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/browser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,qDAAqD,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,EAC/I,iBAAiB,CAClB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,qDAAqD,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,EAC5I,eAAe,CAChB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,EACjI,iBAAiB,CAClB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,EACvG,gBAAgB,CACjB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,yBAAyB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,EACzH,mBAAmB,CACpB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,EAC9H,eAAe,CAChB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAChH,UAAU,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const PageInfoArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export declare const pageInfoHandler: ToolHandler<Page>;
|
|
6
|
+
//# sourceMappingURL=page-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-info.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/page-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,YAAY,gDAAe,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,IAAI,CAkB7C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const PageInfoArgs = z.object({});
|
|
5
|
+
export const pageInfoHandler = async (_args, ctx) => {
|
|
6
|
+
try {
|
|
7
|
+
const page = await ctx.getPage();
|
|
8
|
+
const info = await page.evaluate(() => ({
|
|
9
|
+
url: location.href,
|
|
10
|
+
title: document.title,
|
|
11
|
+
viewport: { width: window.innerWidth, height: window.innerHeight },
|
|
12
|
+
scrollPos: { x: window.scrollX, y: window.scrollY },
|
|
13
|
+
readyState: document.readyState,
|
|
14
|
+
contentType: document.contentType,
|
|
15
|
+
referrer: document.referrer,
|
|
16
|
+
cookies: document.cookie,
|
|
17
|
+
}));
|
|
18
|
+
return okResult(info);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
22
|
+
return errorResult(ErrorCode.PAGE_INFO_FAILED, message);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=page-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-info.js","sourceRoot":"","sources":["../../../src/tools/browser/page-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAsB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YACtC,GAAG,EAAE,QAAQ,CAAC,IAAI;YAClB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;YAClE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE;YACnD,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,OAAO,EAAE,QAAQ,CAAC,MAAM;SACzB,CAAC,CAAC,CAAC;QACJ,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const PdfArgs: z.ZodObject<{
|
|
5
|
+
format: z.ZodDefault<z.ZodEnum<["A4", "Letter", "Legal", "Tabloid"]>>;
|
|
6
|
+
landscape: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
printBackground: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
scale: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
marginTop: z.ZodDefault<z.ZodString>;
|
|
10
|
+
marginRight: z.ZodDefault<z.ZodString>;
|
|
11
|
+
marginBottom: z.ZodDefault<z.ZodString>;
|
|
12
|
+
marginLeft: z.ZodDefault<z.ZodString>;
|
|
13
|
+
displayHeaderFooter: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
headerTemplate: z.ZodOptional<z.ZodString>;
|
|
15
|
+
footerTemplate: z.ZodOptional<z.ZodString>;
|
|
16
|
+
preferCSSPageSize: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
format: "A4" | "Letter" | "Legal" | "Tabloid";
|
|
19
|
+
landscape: boolean;
|
|
20
|
+
printBackground: boolean;
|
|
21
|
+
scale: number;
|
|
22
|
+
marginTop: string;
|
|
23
|
+
marginRight: string;
|
|
24
|
+
marginBottom: string;
|
|
25
|
+
marginLeft: string;
|
|
26
|
+
displayHeaderFooter: boolean;
|
|
27
|
+
preferCSSPageSize: boolean;
|
|
28
|
+
headerTemplate?: string | undefined;
|
|
29
|
+
footerTemplate?: string | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
format?: "A4" | "Letter" | "Legal" | "Tabloid" | undefined;
|
|
32
|
+
landscape?: boolean | undefined;
|
|
33
|
+
printBackground?: boolean | undefined;
|
|
34
|
+
scale?: number | undefined;
|
|
35
|
+
marginTop?: string | undefined;
|
|
36
|
+
marginRight?: string | undefined;
|
|
37
|
+
marginBottom?: string | undefined;
|
|
38
|
+
marginLeft?: string | undefined;
|
|
39
|
+
displayHeaderFooter?: boolean | undefined;
|
|
40
|
+
headerTemplate?: string | undefined;
|
|
41
|
+
footerTemplate?: string | undefined;
|
|
42
|
+
preferCSSPageSize?: boolean | undefined;
|
|
43
|
+
}>;
|
|
44
|
+
export declare const pdfHandler: ToolHandler<Page>;
|
|
45
|
+
//# sourceMappingURL=pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAalB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,IAAI,CAiCxC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
|
+
export const PdfArgs = z.object({
|
|
6
|
+
format: z.enum(['A4', 'Letter', 'Legal', 'Tabloid']).default('A4'),
|
|
7
|
+
landscape: z.boolean().default(false),
|
|
8
|
+
printBackground: z.boolean().default(true),
|
|
9
|
+
scale: z.number().min(0.1).max(2).default(1),
|
|
10
|
+
marginTop: z.string().default('10mm'),
|
|
11
|
+
marginRight: z.string().default('10mm'),
|
|
12
|
+
marginBottom: z.string().default('10mm'),
|
|
13
|
+
marginLeft: z.string().default('10mm'),
|
|
14
|
+
displayHeaderFooter: z.boolean().default(false),
|
|
15
|
+
headerTemplate: z.string().optional(),
|
|
16
|
+
footerTemplate: z.string().optional(),
|
|
17
|
+
preferCSSPageSize: z.boolean().default(false),
|
|
18
|
+
});
|
|
19
|
+
export const pdfHandler = async (args, ctx) => {
|
|
20
|
+
const parsed = PdfArgs.safeParse(args);
|
|
21
|
+
if (!parsed.success)
|
|
22
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
23
|
+
try {
|
|
24
|
+
const page = await ctx.getPage();
|
|
25
|
+
const pdfOpts = {
|
|
26
|
+
format: parsed.data.format,
|
|
27
|
+
landscape: parsed.data.landscape,
|
|
28
|
+
printBackground: parsed.data.printBackground,
|
|
29
|
+
scale: parsed.data.scale,
|
|
30
|
+
margin: {
|
|
31
|
+
top: parsed.data.marginTop,
|
|
32
|
+
right: parsed.data.marginRight,
|
|
33
|
+
bottom: parsed.data.marginBottom,
|
|
34
|
+
left: parsed.data.marginLeft,
|
|
35
|
+
},
|
|
36
|
+
displayHeaderFooter: parsed.data.displayHeaderFooter,
|
|
37
|
+
preferCSSPageSize: parsed.data.preferCSSPageSize,
|
|
38
|
+
};
|
|
39
|
+
if (parsed.data.headerTemplate)
|
|
40
|
+
pdfOpts.headerTemplate = sanitizeInput(parsed.data.headerTemplate).sanitized;
|
|
41
|
+
if (parsed.data.footerTemplate)
|
|
42
|
+
pdfOpts.footerTemplate = sanitizeInput(parsed.data.footerTemplate).sanitized;
|
|
43
|
+
const buffer = await page.pdf(pdfOpts);
|
|
44
|
+
return okResult({
|
|
45
|
+
mimeType: 'application/pdf',
|
|
46
|
+
data: buffer.toString('base64'),
|
|
47
|
+
size: buffer.length,
|
|
48
|
+
format: parsed.data.format,
|
|
49
|
+
landscape: parsed.data.landscape,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
54
|
+
return errorResult(ErrorCode.PDF_FAILED, message);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/tools/browser/pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const ScreenshotArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
6
|
+
fullPage: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
type: z.ZodDefault<z.ZodEnum<["png", "jpeg"]>>;
|
|
8
|
+
quality: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
type: "png" | "jpeg";
|
|
11
|
+
fullPage: boolean;
|
|
12
|
+
selector?: string | undefined;
|
|
13
|
+
quality?: number | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
type?: "png" | "jpeg" | undefined;
|
|
16
|
+
selector?: string | undefined;
|
|
17
|
+
fullPage?: boolean | undefined;
|
|
18
|
+
quality?: number | undefined;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const screenshotHandler: ToolHandler<Page>;
|
|
21
|
+
//# sourceMappingURL=screenshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAyB/C,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
|
+
export const ScreenshotArgs = z.object({
|
|
6
|
+
selector: z.string().optional(),
|
|
7
|
+
fullPage: z.boolean().default(true),
|
|
8
|
+
type: z.enum(['png', 'jpeg']).default('png'),
|
|
9
|
+
quality: z.number().int().min(1).max(100).optional(),
|
|
10
|
+
});
|
|
11
|
+
export const screenshotHandler = async (args, ctx) => {
|
|
12
|
+
const parsed = ScreenshotArgs.safeParse(args);
|
|
13
|
+
if (!parsed.success)
|
|
14
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
15
|
+
const { selector, fullPage, type, quality } = parsed.data;
|
|
16
|
+
try {
|
|
17
|
+
const page = await ctx.getPage();
|
|
18
|
+
let buffer;
|
|
19
|
+
if (selector) {
|
|
20
|
+
const { sanitized: sel } = sanitizeInput(selector);
|
|
21
|
+
const el = await page.waitForSelector(sel, { timeout: 10000, state: 'visible' });
|
|
22
|
+
buffer = await el.screenshot({ type, quality });
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const opts = { type, fullPage };
|
|
26
|
+
if (quality && type === 'jpeg')
|
|
27
|
+
opts.quality = quality;
|
|
28
|
+
buffer = await page.screenshot(opts);
|
|
29
|
+
}
|
|
30
|
+
return okResult({
|
|
31
|
+
mimeType: type === 'png' ? 'image/png' : 'image/jpeg',
|
|
32
|
+
data: buffer.toString('base64'),
|
|
33
|
+
size: buffer.length,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
38
|
+
return errorResult(ErrorCode.SCREENSHOT_FAILED, message);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/browser/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACtE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjF,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,IAAI,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvD,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,QAAQ,CAAC;YACd,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;YACrD,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,IAAI,EAAE,MAAM,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const ExtractWithCssArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
attribute: z.ZodOptional<z.ZodString>;
|
|
7
|
+
multiple: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
selector: string;
|
|
10
|
+
multiple: boolean;
|
|
11
|
+
attribute?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
selector: string;
|
|
14
|
+
attribute?: string | undefined;
|
|
15
|
+
multiple?: boolean | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const extractWithCssHandler: ToolHandler<Page>;
|
|
18
|
+
export declare const ExtractTableArgs: z.ZodObject<{
|
|
19
|
+
selector: z.ZodDefault<z.ZodString>;
|
|
20
|
+
header: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
selector: string;
|
|
23
|
+
header: boolean;
|
|
24
|
+
}, {
|
|
25
|
+
selector?: string | undefined;
|
|
26
|
+
header?: boolean | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const extractTableHandler: ToolHandler<Page>;
|
|
29
|
+
export declare const ExtractSchemaOrgArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
30
|
+
export declare const extractSchemaOrgHandler: ToolHandler<Page>;
|
|
31
|
+
export declare const ExtractOpenGraphArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
32
|
+
export declare const extractOpenGraphHandler: ToolHandler<Page>;
|
|
33
|
+
//# sourceMappingURL=extract-css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-css.d.ts","sourceRoot":"","sources":["../../../src/tools/extraction/extract-css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,IAAI,CAuBnD,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,IAAI,CA6BjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,gDAAe,CAAC;AAEjD,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,IAAI,CAqBrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,gDAAe,CAAC;AAEjD,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,IAAI,CAkBrD,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
|
+
export const ExtractWithCssArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
attribute: z.string().optional(),
|
|
8
|
+
multiple: z.boolean().default(false),
|
|
9
|
+
});
|
|
10
|
+
export const extractWithCssHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = ExtractWithCssArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success)
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
const { selector, attribute, multiple } = parsed.data;
|
|
15
|
+
const { sanitized: sel } = sanitizeInput(selector);
|
|
16
|
+
try {
|
|
17
|
+
const page = await ctx.getPage();
|
|
18
|
+
const data = await page.evaluate((opts) => {
|
|
19
|
+
const elements = document.querySelectorAll(opts.sel);
|
|
20
|
+
if (!elements.length)
|
|
21
|
+
return [];
|
|
22
|
+
const extract = (el) => opts.attr ? el.getAttribute(opts.attr) ?? el.textContent?.trim() ?? '' : el.textContent?.trim() ?? '';
|
|
23
|
+
if (opts.multi)
|
|
24
|
+
return Array.from(elements).map(extract);
|
|
25
|
+
return [extract(elements[0])];
|
|
26
|
+
}, { sel, attr: attribute, multi: multiple });
|
|
27
|
+
return okResult({ selector: sel, count: data.length, data });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
31
|
+
return errorResult(ErrorCode.EXTRACT_CSS_FAILED, message);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const ExtractTableArgs = z.object({
|
|
35
|
+
selector: z.string().min(1).default('table'),
|
|
36
|
+
header: z.boolean().default(true),
|
|
37
|
+
});
|
|
38
|
+
export const extractTableHandler = async (args, ctx) => {
|
|
39
|
+
const parsed = ExtractTableArgs.safeParse(args);
|
|
40
|
+
if (!parsed.success)
|
|
41
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
42
|
+
const { selector, header } = parsed.data;
|
|
43
|
+
const { sanitized: sel } = sanitizeInput(selector);
|
|
44
|
+
try {
|
|
45
|
+
const page = await ctx.getPage();
|
|
46
|
+
const result = await page.evaluate((opts) => {
|
|
47
|
+
const table = document.querySelector(opts.sel);
|
|
48
|
+
if (!table)
|
|
49
|
+
return { headers: [], rows: [] };
|
|
50
|
+
const rows = Array.from(table.querySelectorAll('tr'));
|
|
51
|
+
const startIdx = opts.hdr ? 1 : 0;
|
|
52
|
+
const headers = opts.hdr && rows.length > 0
|
|
53
|
+
? Array.from(rows[0].querySelectorAll('th, td')).map((c) => c.textContent?.trim() ?? '')
|
|
54
|
+
: [];
|
|
55
|
+
const data = rows.slice(startIdx).map((row) => Array.from(row.querySelectorAll('td, th')).map((c) => c.textContent?.trim() ?? ''));
|
|
56
|
+
return { headers, rows: data, count: data.length };
|
|
57
|
+
}, { sel, hdr: header });
|
|
58
|
+
return okResult(result);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
62
|
+
return errorResult(ErrorCode.EXTRACT_TABLE_FAILED, message);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const ExtractSchemaOrgArgs = z.object({});
|
|
66
|
+
export const extractSchemaOrgHandler = async (_args, ctx) => {
|
|
67
|
+
try {
|
|
68
|
+
const page = await ctx.getPage();
|
|
69
|
+
const data = await page.evaluate(() => {
|
|
70
|
+
const scripts = document.querySelectorAll('script[type="application/ld+json"]');
|
|
71
|
+
return Array.from(scripts)
|
|
72
|
+
.map((s) => {
|
|
73
|
+
try {
|
|
74
|
+
return JSON.parse(s.textContent ?? '{}');
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// silently handled
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
.filter(Boolean);
|
|
82
|
+
});
|
|
83
|
+
return okResult({ schemas: data, count: data.length });
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
87
|
+
return errorResult(ErrorCode.EXTRACT_SCHEMA_ORG_FAILED, message);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
export const ExtractOpenGraphArgs = z.object({});
|
|
91
|
+
export const extractOpenGraphHandler = async (_args, ctx) => {
|
|
92
|
+
try {
|
|
93
|
+
const page = await ctx.getPage();
|
|
94
|
+
const data = await page.evaluate(() => {
|
|
95
|
+
const metas = document.querySelectorAll('meta[property^="og:"], meta[name^="og:"]');
|
|
96
|
+
const result = {};
|
|
97
|
+
metas.forEach((m) => {
|
|
98
|
+
const key = m.getAttribute('property') ?? m.getAttribute('name') ?? '';
|
|
99
|
+
const value = m.getAttribute('content') ?? '';
|
|
100
|
+
if (key && value)
|
|
101
|
+
result[key] = value;
|
|
102
|
+
});
|
|
103
|
+
return result;
|
|
104
|
+
});
|
|
105
|
+
return okResult({ og: data });
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
109
|
+
return errorResult(ErrorCode.EXTRACT_OG_FAILED, message);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=extract-css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-css.js","sourceRoot":"","sources":["../../../src/tools/extraction/extract-css.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const ExtractHtmlArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export declare const extractHtmlHandler: ToolHandler<Page>;
|
|
6
|
+
export declare const ExtractMarkdownArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
7
|
+
export declare const extractMarkdownHandler: ToolHandler<Page>;
|
|
8
|
+
export declare const ExtractTextArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
9
|
+
export declare const extractTextHandler: ToolHandler<Page>;
|
|
10
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../src/tools/extraction/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,eAAe,gDAAe,CAAC;AAE5C,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAShD,CAAC;AAEF,eAAO,MAAM,mBAAmB,gDAAe,CAAC;AAEhD,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,IAAI,CAiCpD,CAAC;AAEF,eAAO,MAAM,eAAe,gDAAe,CAAC;AAE5C,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAShD,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const ExtractHtmlArgs = z.object({});
|
|
5
|
+
export const extractHtmlHandler = async (_args, ctx) => {
|
|
6
|
+
try {
|
|
7
|
+
const page = await ctx.getPage();
|
|
8
|
+
const html = await page.content();
|
|
9
|
+
return okResult({ html });
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
13
|
+
return errorResult(ErrorCode.EXTRACT_HTML_FAILED, message);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export const ExtractMarkdownArgs = z.object({});
|
|
17
|
+
export const extractMarkdownHandler = async (_args, ctx) => {
|
|
18
|
+
try {
|
|
19
|
+
const page = await ctx.getPage();
|
|
20
|
+
const text = await page.evaluate(() => {
|
|
21
|
+
const clone = document.body.cloneNode(true);
|
|
22
|
+
clone.querySelectorAll('script, style, nav, footer, header, aside, iframe, svg, [aria-hidden="true"]').forEach((el) => el.remove());
|
|
23
|
+
function walk(node, depth) {
|
|
24
|
+
if (node.nodeType === Node.TEXT_NODE)
|
|
25
|
+
return node.textContent?.trim() || '';
|
|
26
|
+
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
27
|
+
return '';
|
|
28
|
+
const el = node;
|
|
29
|
+
const tag = el.tagName.toLowerCase();
|
|
30
|
+
let out = '';
|
|
31
|
+
if (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)) {
|
|
32
|
+
const level = parseInt(tag[1]);
|
|
33
|
+
out += '\n' + '#'.repeat(level) + ' ';
|
|
34
|
+
}
|
|
35
|
+
if (tag === 'li')
|
|
36
|
+
out += '- ';
|
|
37
|
+
if (tag === 'br')
|
|
38
|
+
out += '\n';
|
|
39
|
+
for (const child of el.childNodes)
|
|
40
|
+
out += walk(child, depth + 1);
|
|
41
|
+
if (['p', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'tr', 'th'].includes(tag))
|
|
42
|
+
out += '\n';
|
|
43
|
+
if (tag === 'a') {
|
|
44
|
+
const href = el.href;
|
|
45
|
+
if (href && !href.startsWith('javascript:'))
|
|
46
|
+
out += ` (${href})`;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
return walk(clone, 0).replace(/\n{3,}/g, '\n\n').trim();
|
|
51
|
+
});
|
|
52
|
+
return okResult({ markdown: text });
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
56
|
+
return errorResult(ErrorCode.EXTRACT_MARKDOWN_FAILED, message);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
export const ExtractTextArgs = z.object({});
|
|
60
|
+
export const extractTextHandler = async (_args, ctx) => {
|
|
61
|
+
try {
|
|
62
|
+
const page = await ctx.getPage();
|
|
63
|
+
const text = await page.evaluate(() => document.body?.innerText ?? '');
|
|
64
|
+
return okResult({ text });
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
68
|
+
return errorResult(ErrorCode.EXTRACT_TEXT_FAILED, message);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/tools/extraction/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/extraction/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAS3D,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CA6BpE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { extractHtmlHandler, ExtractHtmlArgs } from './extract.js';
|
|
2
|
+
import { extractMarkdownHandler, ExtractMarkdownArgs } from './extract.js';
|
|
3
|
+
import { extractTextHandler, ExtractTextArgs } from './extract.js';
|
|
4
|
+
import { extractWithCssHandler, ExtractWithCssArgs } from './extract-css.js';
|
|
5
|
+
import { extractTableHandler, ExtractTableArgs } from './extract-css.js';
|
|
6
|
+
import { extractSchemaOrgHandler, ExtractSchemaOrgArgs } from './extract-css.js';
|
|
7
|
+
import { extractOpenGraphHandler, ExtractOpenGraphArgs } from './extract-css.js';
|
|
8
|
+
export function registerExtractionTools(registry) {
|
|
9
|
+
registry.register({ name: 'browser_extract_html', description: 'Extract full page HTML', category: 'extraction', schema: ExtractHtmlArgs }, extractHtmlHandler);
|
|
10
|
+
registry.register({ name: 'browser_extract_markdown', description: 'Extract page content as approximate markdown', category: 'extraction', schema: ExtractMarkdownArgs }, extractMarkdownHandler);
|
|
11
|
+
registry.register({ name: 'browser_extract_text', description: 'Extract visible text from the page', category: 'extraction', schema: ExtractTextArgs }, extractTextHandler);
|
|
12
|
+
registry.register({ name: 'browser_extract_with_css', description: 'Extract text or attributes from elements matching a CSS selector', category: 'extraction', schema: ExtractWithCssArgs }, extractWithCssHandler);
|
|
13
|
+
registry.register({ name: 'browser_extract_table', description: 'Extract table data as structured JSON', category: 'extraction', schema: ExtractTableArgs }, extractTableHandler);
|
|
14
|
+
registry.register({ name: 'browser_extract_schema_org', description: 'Extract Schema.org JSON-LD structured data', category: 'extraction', schema: ExtractSchemaOrgArgs }, extractSchemaOrgHandler);
|
|
15
|
+
registry.register({ name: 'browser_extract_open_graph', description: 'Extract Open Graph meta tags', category: 'extraction', schema: ExtractOpenGraphArgs }, extractOpenGraphHandler);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/extraction/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,MAAM,UAAU,uBAAuB,CAAC,QAAsB;IAC5D,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,EACxH,kBAAkB,CACnB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,8CAA8C,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACtJ,sBAAsB,CACvB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,EACpI,kBAAkB,CACnB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,kEAAkE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACzK,qBAAqB,CACtB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,uCAAuC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACzI,mBAAmB,CACpB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,4CAA4C,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,EAAE,EACvJ,uBAAuB,CACxB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,EAAE,EACzI,uBAAuB,CACxB,CAAC;AACJ,CAAC"}
|