@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,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const ClickArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
timeout: number;
|
|
9
|
+
selector: string;
|
|
10
|
+
}, {
|
|
11
|
+
selector: string;
|
|
12
|
+
timeout?: number | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const clickHandler: ToolHandler<Page>;
|
|
15
|
+
//# sourceMappingURL=click.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/click.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,SAAS;;;;;;;;;EAGpB,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,IAAI,CAoB1C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 ClickArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
8
|
+
});
|
|
9
|
+
export const clickHandler = async (args, ctx) => {
|
|
10
|
+
const parsed = ClickArgs.safeParse(args);
|
|
11
|
+
if (!parsed.success) {
|
|
12
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
13
|
+
}
|
|
14
|
+
const { selector, timeout } = parsed.data;
|
|
15
|
+
const selResult = sanitizeInput(selector);
|
|
16
|
+
if (selResult.blocked) {
|
|
17
|
+
return errorResult(ErrorCode.URL_BLOCKED, 'Input contains potentially unsafe characters');
|
|
18
|
+
}
|
|
19
|
+
const sel = selResult.sanitized;
|
|
20
|
+
try {
|
|
21
|
+
const page = await ctx.getPage();
|
|
22
|
+
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
23
|
+
await page.click(sel, { timeout });
|
|
24
|
+
return okResult({ clicked: sel });
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28
|
+
return errorResult(ErrorCode.CLICK_FAILED, message);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/tools/interaction/click.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,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,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const DragArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
targetSelector: z.ZodString;
|
|
7
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
timeout: number;
|
|
10
|
+
selector: string;
|
|
11
|
+
targetSelector: string;
|
|
12
|
+
}, {
|
|
13
|
+
selector: string;
|
|
14
|
+
targetSelector: string;
|
|
15
|
+
timeout?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const dragHandler: ToolHandler<Page>;
|
|
18
|
+
//# sourceMappingURL=drag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/drag.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,QAAQ;;;;;;;;;;;;EAInB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,IAAI,CAczC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 DragArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
targetSelector: z.string().min(1),
|
|
8
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
9
|
+
});
|
|
10
|
+
export const dragHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = DragArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success)
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
const { selector, targetSelector, timeout } = parsed.data;
|
|
15
|
+
const { sanitized: src } = sanitizeInput(selector);
|
|
16
|
+
const { sanitized: tgt } = sanitizeInput(targetSelector);
|
|
17
|
+
try {
|
|
18
|
+
const page = await ctx.getPage();
|
|
19
|
+
await page.dragAndDrop(src, tgt, { timeout });
|
|
20
|
+
return okResult({ dragged: src, to: tgt });
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
24
|
+
return errorResult(ErrorCode.DRAG_FAILED, message);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=drag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag.js","sourceRoot":"","sources":["../../../src/tools/interaction/drag.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,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,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,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,WAAW,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const FileUploadArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
paths: z.ZodArray<z.ZodString, "many">;
|
|
7
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
timeout: number;
|
|
10
|
+
selector: string;
|
|
11
|
+
paths: string[];
|
|
12
|
+
}, {
|
|
13
|
+
selector: string;
|
|
14
|
+
paths: string[];
|
|
15
|
+
timeout?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const fileUploadHandler: ToolHandler<Page>;
|
|
18
|
+
//# sourceMappingURL=file-upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/file-upload.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,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAwB/C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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 FileUploadArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
paths: z.array(z.string()).min(1),
|
|
8
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
9
|
+
});
|
|
10
|
+
export const fileUploadHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = FileUploadArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success)
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
const { selector, paths, timeout } = parsed.data;
|
|
15
|
+
const sel = sanitizeInput(selector);
|
|
16
|
+
for (const p of paths) {
|
|
17
|
+
if (p.includes('\0')) {
|
|
18
|
+
return errorResult(ErrorCode.PATH_BLOCKED, 'Path contains null bytes');
|
|
19
|
+
}
|
|
20
|
+
const normalizedForCheck = p.replace(/\\/g, '/');
|
|
21
|
+
const lowerPath = normalizedForCheck.toLowerCase();
|
|
22
|
+
if (lowerPath.includes('/proc/') || lowerPath.includes('/sys/') || lowerPath.includes('/dev/')) {
|
|
23
|
+
return errorResult(ErrorCode.PATH_BLOCKED, 'Path to pseudo-filesystem is blocked');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const page = await ctx.getPage();
|
|
28
|
+
const input = await page.waitForSelector(sel.sanitized, { timeout, state: 'visible' });
|
|
29
|
+
await input.setInputFiles(paths);
|
|
30
|
+
return okResult({ uploaded: sel.sanitized, files: paths.length });
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
34
|
+
return errorResult(ErrorCode.UPLOAD_FAILED, message);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=file-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../../src/tools/interaction/file-upload.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,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,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/F,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,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,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const FillArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
value: z.ZodString;
|
|
7
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
value: string;
|
|
10
|
+
timeout: number;
|
|
11
|
+
selector: string;
|
|
12
|
+
}, {
|
|
13
|
+
value: string;
|
|
14
|
+
selector: string;
|
|
15
|
+
timeout?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const fillHandler: ToolHandler<Page>;
|
|
18
|
+
//# sourceMappingURL=fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/fill.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,QAAQ;;;;;;;;;;;;EAInB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,IAAI,CAsBzC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 FillArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
value: z.string(),
|
|
8
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
9
|
+
});
|
|
10
|
+
export const fillHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = FillArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success) {
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
}
|
|
15
|
+
const { selector, value, timeout } = parsed.data;
|
|
16
|
+
const selResult = sanitizeInput(selector);
|
|
17
|
+
const valResult = sanitizeInput(value);
|
|
18
|
+
if (selResult.blocked || valResult.blocked) {
|
|
19
|
+
return errorResult(ErrorCode.URL_BLOCKED, 'Input contains potentially unsafe characters');
|
|
20
|
+
}
|
|
21
|
+
const sel = selResult.sanitized;
|
|
22
|
+
const val = valResult.sanitized;
|
|
23
|
+
try {
|
|
24
|
+
const page = await ctx.getPage();
|
|
25
|
+
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
26
|
+
await page.fill(sel, val, { timeout });
|
|
27
|
+
return okResult({ filled: sel });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
31
|
+
return errorResult(ErrorCode.FILL_FAILED, message);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=fill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/tools/interaction/fill.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACjD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3C,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,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,WAAW,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const HoverArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
timeout: number;
|
|
9
|
+
selector: string;
|
|
10
|
+
}, {
|
|
11
|
+
selector: string;
|
|
12
|
+
timeout?: number | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const hoverHandler: ToolHandler<Page>;
|
|
15
|
+
//# sourceMappingURL=hover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/hover.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,SAAS;;;;;;;;;EAGpB,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,IAAI,CAc1C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 HoverArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
8
|
+
});
|
|
9
|
+
export const hoverHandler = async (args, ctx) => {
|
|
10
|
+
const parsed = HoverArgs.safeParse(args);
|
|
11
|
+
if (!parsed.success)
|
|
12
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
13
|
+
const { selector, timeout } = parsed.data;
|
|
14
|
+
const { sanitized: sel } = sanitizeInput(selector);
|
|
15
|
+
try {
|
|
16
|
+
const page = await ctx.getPage();
|
|
17
|
+
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
18
|
+
await page.hover(sel, { timeout });
|
|
19
|
+
return okResult({ hovered: sel });
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
23
|
+
return errorResult(ErrorCode.HOVER_FAILED, message);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=hover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../src/tools/interaction/hover.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,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,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,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,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAU3D,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAiCrE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { clickHandler, ClickArgs } from './click.js';
|
|
2
|
+
import { fillHandler, FillArgs } from './fill.js';
|
|
3
|
+
import { selectHandler, SelectArgs } from './select.js';
|
|
4
|
+
import { hoverHandler, HoverArgs } from './hover.js';
|
|
5
|
+
import { dragHandler, DragArgs } from './drag.js';
|
|
6
|
+
import { typeHandler, TypeArgs } from './type.js';
|
|
7
|
+
import { pressKeyHandler, PressKeyArgs } from './press-key.js';
|
|
8
|
+
import { fileUploadHandler, FileUploadArgs } from './file-upload.js';
|
|
9
|
+
export function registerInteractionTools(registry) {
|
|
10
|
+
registry.register({ name: 'browser_click', description: 'Click an element identified by CSS selector', category: 'interaction', schema: ClickArgs }, clickHandler);
|
|
11
|
+
registry.register({ name: 'browser_fill', description: 'Fill text into an input field', category: 'interaction', schema: FillArgs }, fillHandler);
|
|
12
|
+
registry.register({ name: 'browser_select', description: 'Select option(s) in a dropdown', category: 'interaction', schema: SelectArgs }, selectHandler);
|
|
13
|
+
registry.register({ name: 'browser_hover', description: 'Hover over an element', category: 'interaction', schema: HoverArgs }, hoverHandler);
|
|
14
|
+
registry.register({ name: 'browser_drag', description: 'Drag and drop an element to a target', category: 'interaction', schema: DragArgs }, dragHandler);
|
|
15
|
+
registry.register({ name: 'browser_type', description: 'Type text into an input field character by character', category: 'interaction', schema: TypeArgs }, typeHandler);
|
|
16
|
+
registry.register({ name: 'browser_press_key', description: 'Press a keyboard key (e.g. Enter, ArrowDown, Escape)', category: 'interaction', schema: PressKeyArgs }, pressKeyHandler);
|
|
17
|
+
registry.register({ name: 'browser_file_upload', description: 'Upload files via a file input element', category: 'interaction', schema: FileUploadArgs }, fileUploadHandler);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/interaction/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,UAAU,wBAAwB,CAAC,QAAsB;IAC7D,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,EACjI,YAAY,CACb,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,EACjH,WAAW,CACZ,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,gCAAgC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,EACtH,aAAa,CACd,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,EAC3G,YAAY,CACb,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,EACxH,WAAW,CACZ,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,sDAAsD,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,EACxI,WAAW,CACZ,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,sDAAsD,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,EACjJ,eAAe,CAChB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,uCAAuC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,EACtI,iBAAiB,CAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const PressKeyArgs: z.ZodObject<{
|
|
5
|
+
key: z.ZodString;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
key: string;
|
|
8
|
+
}, {
|
|
9
|
+
key: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const pressKeyHandler: ToolHandler<Page>;
|
|
12
|
+
//# sourceMappingURL=press-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press-key.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/press-key.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,YAAY;;;;;;EAEvB,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,IAAI,CAa7C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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 PressKeyArgs = z.object({
|
|
6
|
+
key: z.string().min(1),
|
|
7
|
+
});
|
|
8
|
+
export const pressKeyHandler = async (args, ctx) => {
|
|
9
|
+
const parsed = PressKeyArgs.safeParse(args);
|
|
10
|
+
if (!parsed.success)
|
|
11
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
12
|
+
const { key } = parsed.data;
|
|
13
|
+
const { sanitized: k } = sanitizeInput(key);
|
|
14
|
+
try {
|
|
15
|
+
const page = await ctx.getPage();
|
|
16
|
+
await page.keyboard.press(k);
|
|
17
|
+
return okResult({ pressed: k });
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
21
|
+
return errorResult(ErrorCode.PRESS_KEY_FAILED, message);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=press-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press-key.js","sourceRoot":"","sources":["../../../src/tools/interaction/press-key.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACpE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC,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,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const SelectArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
values: z.ZodArray<z.ZodString, "many">;
|
|
7
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
values: string[];
|
|
10
|
+
timeout: number;
|
|
11
|
+
selector: string;
|
|
12
|
+
}, {
|
|
13
|
+
values: string[];
|
|
14
|
+
selector: string;
|
|
15
|
+
timeout?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const selectHandler: ToolHandler<Page>;
|
|
18
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/select.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,UAAU;;;;;;;;;;;;EAIrB,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,IAAI,CAe3C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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 SelectArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
values: z.array(z.string()).min(1),
|
|
8
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
9
|
+
});
|
|
10
|
+
export const selectHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = SelectArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success)
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
const { selector, values, timeout } = parsed.data;
|
|
15
|
+
const { sanitized: sel } = sanitizeInput(selector);
|
|
16
|
+
const sanitizedValues = values.map(v => sanitizeInput(v).sanitized);
|
|
17
|
+
try {
|
|
18
|
+
const page = await ctx.getPage();
|
|
19
|
+
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
20
|
+
await page.selectOption(sel, sanitizedValues, { timeout });
|
|
21
|
+
return okResult({ selected: sel, values: sanitizedValues });
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
25
|
+
return errorResult(ErrorCode.SELECT_FAILED, message);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/tools/interaction/select.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,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,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAC9D,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,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -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 TypeArgs: z.ZodObject<{
|
|
5
|
+
selector: z.ZodString;
|
|
6
|
+
text: z.ZodString;
|
|
7
|
+
delay: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
timeout: number;
|
|
11
|
+
text: string;
|
|
12
|
+
selector: string;
|
|
13
|
+
delay: number;
|
|
14
|
+
}, {
|
|
15
|
+
text: string;
|
|
16
|
+
selector: string;
|
|
17
|
+
timeout?: number | undefined;
|
|
18
|
+
delay?: number | undefined;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const typeHandler: ToolHandler<Page>;
|
|
21
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/type.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,QAAQ;;;;;;;;;;;;;;;EAKnB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,IAAI,CAgBzC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
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 TypeArgs = z.object({
|
|
6
|
+
selector: z.string().min(1),
|
|
7
|
+
text: z.string(),
|
|
8
|
+
delay: z.number().int().min(0).max(1000).default(0),
|
|
9
|
+
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
10
|
+
});
|
|
11
|
+
export const typeHandler = async (args, ctx) => {
|
|
12
|
+
const parsed = TypeArgs.safeParse(args);
|
|
13
|
+
if (!parsed.success)
|
|
14
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
15
|
+
const { selector, text, delay, timeout } = parsed.data;
|
|
16
|
+
const { sanitized: sel } = sanitizeInput(selector);
|
|
17
|
+
const { sanitized: txt } = sanitizeInput(text);
|
|
18
|
+
try {
|
|
19
|
+
const page = await ctx.getPage();
|
|
20
|
+
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
21
|
+
await page.click(sel, { timeout });
|
|
22
|
+
await page.type(sel, txt, { delay });
|
|
23
|
+
return okResult({ typed: sel, text: txt });
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
27
|
+
return errorResult(ErrorCode.TYPE_FAILED, message);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/tools/interaction/type.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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,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,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,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,WAAW,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,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 GoBackArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export declare const goBackHandler: ToolHandler<Page>;
|
|
6
|
+
//# sourceMappingURL=back.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"back.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation/back.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,UAAU,gDAAe,CAAC;AAEvC,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,IAAI,CAS3C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const GoBackArgs = z.object({});
|
|
5
|
+
export const goBackHandler = async (_args, ctx) => {
|
|
6
|
+
try {
|
|
7
|
+
const page = await ctx.getPage();
|
|
8
|
+
await page.goBack();
|
|
9
|
+
return okResult({ finalUrl: page.url() });
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
13
|
+
return errorResult(ErrorCode.GO_BACK_FAILED, message);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=back.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"back.js","sourceRoot":"","sources":["../../../src/tools/navigation/back.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,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,aAAa,GAAsB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5C,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,cAAc,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;AACH,CAAC,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 GoForwardArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export declare const goForwardHandler: ToolHandler<Page>;
|
|
6
|
+
//# sourceMappingURL=forward.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forward.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation/forward.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,aAAa,gDAAe,CAAC;AAE1C,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAS9C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const GoForwardArgs = z.object({});
|
|
5
|
+
export const goForwardHandler = async (_args, ctx) => {
|
|
6
|
+
try {
|
|
7
|
+
const page = await ctx.getPage();
|
|
8
|
+
await page.goForward();
|
|
9
|
+
return okResult({ finalUrl: page.url() });
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
13
|
+
return errorResult(ErrorCode.GO_FORWARD_FAILED, message);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=forward.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../src/tools/navigation/forward.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,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAsB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACtE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5C,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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAqBpE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { navigateHandler, NavigateArgs } from './navigate.js';
|
|
2
|
+
import { goBackHandler, GoBackArgs } from './back.js';
|
|
3
|
+
import { goForwardHandler, GoForwardArgs } from './forward.js';
|
|
4
|
+
import { refreshHandler, RefreshArgs } from './refresh.js';
|
|
5
|
+
import { waitForHandler, WaitForArgs } from './wait-for.js';
|
|
6
|
+
export function registerNavigationTools(registry) {
|
|
7
|
+
registry.register({ name: 'browser_navigate', description: 'Navigate to a URL', category: 'navigation', schema: NavigateArgs }, navigateHandler);
|
|
8
|
+
registry.register({ name: 'browser_go_back', description: 'Go back to the previous page in history', category: 'navigation', schema: GoBackArgs }, goBackHandler);
|
|
9
|
+
registry.register({ name: 'browser_go_forward', description: 'Go forward to the next page in history', category: 'navigation', schema: GoForwardArgs }, goForwardHandler);
|
|
10
|
+
registry.register({ name: 'browser_refresh', description: 'Refresh/reload the current page', category: 'navigation', schema: RefreshArgs }, refreshHandler);
|
|
11
|
+
registry.register({ name: 'browser_wait_for', description: 'Wait for a specified timeout in milliseconds', category: 'navigation', schema: WaitForArgs }, waitForHandler);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/navigation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,UAAU,uBAAuB,CAAC,QAAsB;IAC5D,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,EAC5G,eAAe,CAChB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,yCAAyC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,EAC/H,aAAa,CACd,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,EACpI,gBAAgB,CACjB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,iCAAiC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,EACxH,cAAc,CACf,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,8CAA8C,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,EACtI,cAAc,CACf,CAAC;AACJ,CAAC"}
|