agent-web-interface 4.0.0 → 4.1.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/dist/src/index.js +9 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/temp-file.d.ts +27 -0
- package/dist/src/lib/temp-file.d.ts.map +1 -0
- package/dist/src/lib/temp-file.js +55 -0
- package/dist/src/lib/temp-file.js.map +1 -0
- package/dist/src/screenshot/index.d.ts +10 -0
- package/dist/src/screenshot/index.d.ts.map +1 -0
- package/dist/src/screenshot/index.js +9 -0
- package/dist/src/screenshot/index.js.map +1 -0
- package/dist/src/screenshot/screenshot-capture.d.ts +50 -0
- package/dist/src/screenshot/screenshot-capture.d.ts.map +1 -0
- package/dist/src/screenshot/screenshot-capture.js +100 -0
- package/dist/src/screenshot/screenshot-capture.js.map +1 -0
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/mcp-server.js +25 -0
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/snapshot/extractors/index.d.ts +2 -1
- package/dist/src/snapshot/extractors/index.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/index.js +2 -0
- package/dist/src/snapshot/extractors/index.js.map +1 -1
- package/dist/src/snapshot/extractors/interactivity-detector.d.ts +27 -0
- package/dist/src/snapshot/extractors/interactivity-detector.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/interactivity-detector.js +190 -0
- package/dist/src/snapshot/extractors/interactivity-detector.js.map +1 -0
- package/dist/src/snapshot/extractors/types.d.ts +15 -0
- package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/types.js.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.js +102 -1
- package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
- package/dist/src/snapshot/snapshot.types.d.ts +2 -0
- package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot.types.js +1 -1
- package/dist/src/snapshot/snapshot.types.js.map +1 -1
- package/dist/src/state/actionables-filter.js +1 -1
- package/dist/src/state/actionables-filter.js.map +1 -1
- package/dist/src/state/element-registry.js +2 -2
- package/dist/src/state/element-registry.js.map +1 -1
- package/dist/src/state/state-manager.d.ts.map +1 -1
- package/dist/src/state/state-manager.js +31 -3
- package/dist/src/state/state-manager.js.map +1 -1
- package/dist/src/state/state-renderer.d.ts +10 -0
- package/dist/src/state/state-renderer.d.ts.map +1 -1
- package/dist/src/state/state-renderer.js +44 -12
- package/dist/src/state/state-renderer.js.map +1 -1
- package/dist/src/state/types.d.ts +4 -0
- package/dist/src/state/types.d.ts.map +1 -1
- package/dist/src/tools/browser-tools.d.ts +10 -0
- package/dist/src/tools/browser-tools.d.ts.map +1 -1
- package/dist/src/tools/browser-tools.js +37 -1
- package/dist/src/tools/browser-tools.js.map +1 -1
- package/dist/src/tools/index.d.ts +3 -2
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +6 -2
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/tool-result.types.d.ts +46 -0
- package/dist/src/tools/tool-result.types.d.ts.map +1 -0
- package/dist/src/tools/tool-result.types.js +30 -0
- package/dist/src/tools/tool-result.types.js.map +1 -0
- package/dist/src/tools/tool-schemas.d.ts +83 -0
- package/dist/src/tools/tool-schemas.d.ts.map +1 -1
- package/dist/src/tools/tool-schemas.js +50 -0
- package/dist/src/tools/tool-schemas.js.map +1 -1
- package/package.json +1 -1
package/dist/src/index.js
CHANGED
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
import { BrowserAutomationServer } from './server/mcp-server.js';
|
|
8
8
|
import { initServerConfig, getSessionManager, getServerConfig, ensureBrowserForTools, isSessionManagerInitialized, } from './server/server-config.js';
|
|
9
9
|
import { getLogger } from './shared/services/logging.service.js';
|
|
10
|
+
import { cleanupTempFiles } from './lib/temp-file.js';
|
|
10
11
|
const logger = getLogger();
|
|
11
12
|
import { initializeTools, initializeFormTools,
|
|
12
13
|
// Tool handlers
|
|
13
|
-
listPages, closePage, closeSession, navigate, goBack, goForward, reload, captureSnapshot, findElements, getNodeDetails, scrollElementIntoView, scrollPage, click, type, press, select, hover, getFormUnderstanding, getFieldContext,
|
|
14
|
+
listPages, closePage, closeSession, navigate, goBack, goForward, reload, captureSnapshot, findElements, getNodeDetails, scrollElementIntoView, scrollPage, click, type, press, select, hover, getFormUnderstanding, getFieldContext, takeScreenshot,
|
|
14
15
|
// Input schemas only (all outputs are XML strings now)
|
|
15
|
-
ListPagesInputSchema, ClosePageInputSchema, CloseSessionInputSchema, NavigateInputSchema, GoBackInputSchema, GoForwardInputSchema, ReloadInputSchema, CaptureSnapshotInputSchema, FindElementsInputSchema, GetNodeDetailsInputSchema, ScrollElementIntoViewInputSchemaBase, ScrollPageInputSchema, ClickInputSchemaBase, TypeInputSchemaBase, PressInputSchema, SelectInputSchemaBase, HoverInputSchemaBase, GetFormUnderstandingInputSchema, GetFieldContextInputSchema, } from './tools/index.js';
|
|
16
|
+
ListPagesInputSchema, ClosePageInputSchema, CloseSessionInputSchema, NavigateInputSchema, GoBackInputSchema, GoForwardInputSchema, ReloadInputSchema, CaptureSnapshotInputSchema, FindElementsInputSchema, GetNodeDetailsInputSchema, ScrollElementIntoViewInputSchemaBase, ScrollPageInputSchema, ClickInputSchemaBase, TypeInputSchemaBase, PressInputSchema, SelectInputSchemaBase, HoverInputSchemaBase, GetFormUnderstandingInputSchema, GetFieldContextInputSchema, TakeScreenshotInputSchemaBase, } from './tools/index.js';
|
|
16
17
|
/**
|
|
17
18
|
* Wrap a tool handler with lazy browser initialization.
|
|
18
19
|
* Works with both sync and async handlers - sync return values are automatically
|
|
@@ -120,6 +121,11 @@ function initializeServer() {
|
|
|
120
121
|
description: 'Get complete details for one element: exact position, size, state, attributes. Use when you need more info than find_elements provides, like precise coordinates or full attribute list.',
|
|
121
122
|
inputSchema: GetNodeDetailsInputSchema.shape,
|
|
122
123
|
}, withLazyInit(getNodeDetails, 'get_element_details'));
|
|
124
|
+
server.registerTool('take_screenshot', {
|
|
125
|
+
title: 'Take Screenshot',
|
|
126
|
+
description: 'Capture a screenshot of the current page or a specific element. Returns the image directly for small screenshots (<2MB) or saves to a temp file for large ones. Use `eid` for element screenshots (requires a prior snapshot) or `fullPage: true` for full-page capture. Supports PNG (lossless, default) and JPEG (lossy with quality 0-100). Cannot combine eid and fullPage.',
|
|
127
|
+
inputSchema: TakeScreenshotInputSchemaBase.shape,
|
|
128
|
+
}, withLazyInit(takeScreenshot, 'take_screenshot'));
|
|
123
129
|
// ============================================================================
|
|
124
130
|
// INTERACTION TOOLS
|
|
125
131
|
// ============================================================================
|
|
@@ -185,6 +191,7 @@ async function main() {
|
|
|
185
191
|
console.error(`Shutting down... (${signal})`);
|
|
186
192
|
void (async () => {
|
|
187
193
|
try {
|
|
194
|
+
await cleanupTempFiles();
|
|
188
195
|
// Shutdown browser session first (only if initialized)
|
|
189
196
|
if (isSessionManagerInitialized()) {
|
|
190
197
|
const session = getSessionManager();
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temp File Utility
|
|
3
|
+
*
|
|
4
|
+
* Writes binary data to temporary files with unique names.
|
|
5
|
+
* Used when tool results are too large for inline MCP responses.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Write base64-encoded data to a temporary file.
|
|
9
|
+
*
|
|
10
|
+
* @param base64Data - Base64-encoded file content
|
|
11
|
+
* @param extension - File extension without dot (e.g., 'png', 'jpg')
|
|
12
|
+
* @returns Absolute path to the written file
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeTempFile(base64Data: string, extension: string): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Compute the byte size of base64-encoded data.
|
|
17
|
+
*
|
|
18
|
+
* @param base64 - Base64-encoded string
|
|
19
|
+
* @returns Size in bytes
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeBase64ByteSize(base64: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Clean up all temp files created during this session.
|
|
24
|
+
* Silently ignores files that have already been deleted.
|
|
25
|
+
*/
|
|
26
|
+
export declare function cleanupTempFiles(): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=temp-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temp-file.d.ts","sourceRoot":"","sources":["../../../src/lib/temp-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUtD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temp File Utility
|
|
3
|
+
*
|
|
4
|
+
* Writes binary data to temporary files with unique names.
|
|
5
|
+
* Used when tool results are too large for inline MCP responses.
|
|
6
|
+
*/
|
|
7
|
+
import { writeFile, unlink } from 'fs/promises';
|
|
8
|
+
import { tmpdir } from 'os';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { randomBytes } from 'crypto';
|
|
11
|
+
/** Tracks all temp files created during the session */
|
|
12
|
+
const trackedFiles = new Set();
|
|
13
|
+
/**
|
|
14
|
+
* Write base64-encoded data to a temporary file.
|
|
15
|
+
*
|
|
16
|
+
* @param base64Data - Base64-encoded file content
|
|
17
|
+
* @param extension - File extension without dot (e.g., 'png', 'jpg')
|
|
18
|
+
* @returns Absolute path to the written file
|
|
19
|
+
*/
|
|
20
|
+
export async function writeTempFile(base64Data, extension) {
|
|
21
|
+
const buffer = Buffer.from(base64Data, 'base64');
|
|
22
|
+
const filename = `screenshot-${randomBytes(6).toString('hex')}.${extension}`;
|
|
23
|
+
const filepath = join(tmpdir(), filename);
|
|
24
|
+
await writeFile(filepath, buffer);
|
|
25
|
+
trackedFiles.add(filepath);
|
|
26
|
+
return filepath;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Compute the byte size of base64-encoded data.
|
|
30
|
+
*
|
|
31
|
+
* @param base64 - Base64-encoded string
|
|
32
|
+
* @returns Size in bytes
|
|
33
|
+
*/
|
|
34
|
+
export function computeBase64ByteSize(base64) {
|
|
35
|
+
let size = Math.floor((base64.length * 3) / 4);
|
|
36
|
+
if (base64.endsWith('=='))
|
|
37
|
+
size -= 2;
|
|
38
|
+
else if (base64.endsWith('='))
|
|
39
|
+
size -= 1;
|
|
40
|
+
return size;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clean up all temp files created during this session.
|
|
44
|
+
* Silently ignores files that have already been deleted.
|
|
45
|
+
*/
|
|
46
|
+
export async function cleanupTempFiles() {
|
|
47
|
+
const deletions = [...trackedFiles].map((filepath) => unlink(filepath).catch((err) => {
|
|
48
|
+
if (err.code !== 'ENOENT') {
|
|
49
|
+
console.warn(`[cleanup] Failed to delete temp file ${filepath}: ${err.message}`);
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
await Promise.all(deletions);
|
|
53
|
+
trackedFiles.clear();
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=temp-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temp-file.js","sourceRoot":"","sources":["../../../src/lib/temp-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,uDAAuD;AACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,SAAiB;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,cAAc,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,IAAI,IAAI,CAAC,CAAC;SAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,IAAI,IAAI,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAA0B,EAAE,EAAE;QACpD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,wCAAwC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screenshot Module
|
|
3
|
+
*
|
|
4
|
+
* Browser screenshot capture via CDP.
|
|
5
|
+
*
|
|
6
|
+
* @module screenshot
|
|
7
|
+
*/
|
|
8
|
+
export { captureScreenshot, getElementBoundingBox } from './screenshot-capture.js';
|
|
9
|
+
export type { ScreenshotOptions } from './screenshot-capture.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screenshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screenshot Capture Service
|
|
3
|
+
*
|
|
4
|
+
* Captures browser screenshots via CDP with support for:
|
|
5
|
+
* - Viewport screenshots (default)
|
|
6
|
+
* - Full page screenshots (beyond viewport)
|
|
7
|
+
* - Element screenshots (clipped to bounding box)
|
|
8
|
+
* - PNG and JPEG formats with quality control
|
|
9
|
+
* - Size-based inline vs file storage (2MB threshold)
|
|
10
|
+
*
|
|
11
|
+
* Uses `optimizeForSpeed: true` for faster encoding (matches chrome-devtools-mcp).
|
|
12
|
+
*/
|
|
13
|
+
import type { CdpClient } from '../cdp/cdp-client.interface.js';
|
|
14
|
+
import type { Protocol } from 'devtools-protocol';
|
|
15
|
+
import type { ImageResult, FileResult } from '../tools/tool-result.types.js';
|
|
16
|
+
export interface ScreenshotOptions {
|
|
17
|
+
/** Image format (default: 'png') */
|
|
18
|
+
format?: 'png' | 'jpeg';
|
|
19
|
+
/** JPEG quality 0-100 (ignored for PNG) */
|
|
20
|
+
quality?: number;
|
|
21
|
+
/** Use faster encoding at cost of larger file size (default: true) */
|
|
22
|
+
optimizeForSpeed?: boolean;
|
|
23
|
+
/** Clip to specific viewport region (for element screenshots) */
|
|
24
|
+
clip?: Protocol.Page.Viewport;
|
|
25
|
+
/** Capture full page beyond visible viewport (default: false) */
|
|
26
|
+
captureBeyondViewport?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Capture a screenshot via CDP `Page.captureScreenshot`.
|
|
30
|
+
*
|
|
31
|
+
* Returns an `ImageResult` (inline base64) if under 2MB,
|
|
32
|
+
* or a `FileResult` (temp file path) if 2MB or larger.
|
|
33
|
+
*
|
|
34
|
+
* @param cdp - CDP client for the target page
|
|
35
|
+
* @param options - Screenshot configuration
|
|
36
|
+
* @returns Image result for inline delivery, or file result for large screenshots
|
|
37
|
+
*/
|
|
38
|
+
export declare function captureScreenshot(cdp: CdpClient, options?: ScreenshotOptions): Promise<ImageResult | FileResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Get the bounding box of an element for clipped screenshots.
|
|
41
|
+
*
|
|
42
|
+
* Uses CDP `DOM.getBoxModel` to retrieve the content box coordinates.
|
|
43
|
+
*
|
|
44
|
+
* @param cdp - CDP client
|
|
45
|
+
* @param backendNodeId - CDP backend node ID of the target element
|
|
46
|
+
* @returns Viewport clip region suitable for `Page.captureScreenshot`
|
|
47
|
+
* @throws Error if element has no box model (e.g., `display: none`)
|
|
48
|
+
*/
|
|
49
|
+
export declare function getElementBoundingBox(cdp: CdpClient, backendNodeId: number): Promise<Protocol.Page.Viewport>;
|
|
50
|
+
//# sourceMappingURL=screenshot-capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-capture.d.ts","sourceRoot":"","sources":["../../../src/screenshot/screenshot-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAK7E,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iEAAiE;IACjE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9B,iEAAiE;IACjE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,CA8CnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,SAAS,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAwBjC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screenshot Capture Service
|
|
3
|
+
*
|
|
4
|
+
* Captures browser screenshots via CDP with support for:
|
|
5
|
+
* - Viewport screenshots (default)
|
|
6
|
+
* - Full page screenshots (beyond viewport)
|
|
7
|
+
* - Element screenshots (clipped to bounding box)
|
|
8
|
+
* - PNG and JPEG formats with quality control
|
|
9
|
+
* - Size-based inline vs file storage (2MB threshold)
|
|
10
|
+
*
|
|
11
|
+
* Uses `optimizeForSpeed: true` for faster encoding (matches chrome-devtools-mcp).
|
|
12
|
+
*/
|
|
13
|
+
import { writeTempFile, computeBase64ByteSize } from '../lib/temp-file.js';
|
|
14
|
+
/** Screenshots under this size are returned inline as base64 */
|
|
15
|
+
const INLINE_SIZE_THRESHOLD_BYTES = 2 * 1024 * 1024; // 2MB
|
|
16
|
+
/**
|
|
17
|
+
* Capture a screenshot via CDP `Page.captureScreenshot`.
|
|
18
|
+
*
|
|
19
|
+
* Returns an `ImageResult` (inline base64) if under 2MB,
|
|
20
|
+
* or a `FileResult` (temp file path) if 2MB or larger.
|
|
21
|
+
*
|
|
22
|
+
* @param cdp - CDP client for the target page
|
|
23
|
+
* @param options - Screenshot configuration
|
|
24
|
+
* @returns Image result for inline delivery, or file result for large screenshots
|
|
25
|
+
*/
|
|
26
|
+
export async function captureScreenshot(cdp, options = {}) {
|
|
27
|
+
const format = options.format ?? 'png';
|
|
28
|
+
const mimeType = format === 'jpeg' ? 'image/jpeg' : 'image/png';
|
|
29
|
+
const params = {
|
|
30
|
+
format,
|
|
31
|
+
quality: format === 'jpeg' ? (options.quality ?? 80) : undefined,
|
|
32
|
+
optimizeForSpeed: options.optimizeForSpeed ?? true,
|
|
33
|
+
};
|
|
34
|
+
if (options.captureBeyondViewport) {
|
|
35
|
+
const metrics = await cdp.send('Page.getLayoutMetrics', undefined);
|
|
36
|
+
params.clip = {
|
|
37
|
+
x: 0,
|
|
38
|
+
y: 0,
|
|
39
|
+
width: metrics.cssContentSize.width,
|
|
40
|
+
height: metrics.cssContentSize.height,
|
|
41
|
+
scale: 1,
|
|
42
|
+
};
|
|
43
|
+
params.captureBeyondViewport = true;
|
|
44
|
+
}
|
|
45
|
+
else if (options.clip) {
|
|
46
|
+
params.clip = options.clip;
|
|
47
|
+
}
|
|
48
|
+
const response = await cdp.send('Page.captureScreenshot', params);
|
|
49
|
+
const base64Data = response.data;
|
|
50
|
+
const sizeBytes = computeBase64ByteSize(base64Data);
|
|
51
|
+
if (sizeBytes < INLINE_SIZE_THRESHOLD_BYTES) {
|
|
52
|
+
return {
|
|
53
|
+
type: 'image',
|
|
54
|
+
data: base64Data,
|
|
55
|
+
mimeType,
|
|
56
|
+
sizeBytes,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const extension = format === 'jpeg' ? 'jpg' : 'png';
|
|
60
|
+
const path = await writeTempFile(base64Data, extension);
|
|
61
|
+
return {
|
|
62
|
+
type: 'file',
|
|
63
|
+
path,
|
|
64
|
+
mimeType,
|
|
65
|
+
sizeBytes,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the bounding box of an element for clipped screenshots.
|
|
70
|
+
*
|
|
71
|
+
* Uses CDP `DOM.getBoxModel` to retrieve the content box coordinates.
|
|
72
|
+
*
|
|
73
|
+
* @param cdp - CDP client
|
|
74
|
+
* @param backendNodeId - CDP backend node ID of the target element
|
|
75
|
+
* @returns Viewport clip region suitable for `Page.captureScreenshot`
|
|
76
|
+
* @throws Error if element has no box model (e.g., `display: none`)
|
|
77
|
+
*/
|
|
78
|
+
export async function getElementBoundingBox(cdp, backendNodeId) {
|
|
79
|
+
const response = await cdp.send('DOM.getBoxModel', { backendNodeId });
|
|
80
|
+
if (!response.model) {
|
|
81
|
+
throw new Error(`Element (backendNodeId=${backendNodeId}) has no box model — it may be hidden`);
|
|
82
|
+
}
|
|
83
|
+
// Content quad: [x1,y1, x2,y2, x3,y3, x4,y4]
|
|
84
|
+
// For axis-aligned elements: Top-left, Top-right, Bottom-right, Bottom-left
|
|
85
|
+
// For transformed elements (CSS rotate, etc.): corners may not be axis-aligned,
|
|
86
|
+
// so we compute the axis-aligned bounding box from all 4 corner points.
|
|
87
|
+
const q = response.model.content;
|
|
88
|
+
const xs = [q[0], q[2], q[4], q[6]];
|
|
89
|
+
const ys = [q[1], q[3], q[5], q[7]];
|
|
90
|
+
const minX = Math.min(...xs);
|
|
91
|
+
const minY = Math.min(...ys);
|
|
92
|
+
return {
|
|
93
|
+
x: Math.round(minX),
|
|
94
|
+
y: Math.round(minY),
|
|
95
|
+
width: Math.round(Math.max(...xs) - minX),
|
|
96
|
+
height: Math.round(Math.max(...ys) - minY),
|
|
97
|
+
scale: 1,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=screenshot-capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-capture.js","sourceRoot":"","sources":["../../../src/screenshot/screenshot-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,uCAAuC,CAAC;AAI/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,qBAAqB;IAIvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAuB;gBAEX,MAAM,EAAE,YAAY;IA8BjD;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,CAAC,EAAE,WAAW,CAAC;KAC5B,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAC5C,IAAI;IAiFP;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAC/B,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -8,6 +8,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
8
8
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
9
9
|
import { getLogger, } from '../shared/services/logging.service.js';
|
|
10
10
|
import { SetLevelRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import { isImageResult, isFileResult } from '../tools/tool-result.types.js';
|
|
11
12
|
/**
|
|
12
13
|
* Browser Automation MCP Server
|
|
13
14
|
*
|
|
@@ -67,6 +68,30 @@ export class BrowserAutomationServer {
|
|
|
67
68
|
const result = await handler(input);
|
|
68
69
|
const executionTime = Date.now() - startTime;
|
|
69
70
|
logger.debug(`Tool ${name} completed in ${executionTime}ms`);
|
|
71
|
+
// Image result - return as MCP ImageContent (inline base64)
|
|
72
|
+
if (isImageResult(result)) {
|
|
73
|
+
return {
|
|
74
|
+
content: [
|
|
75
|
+
{
|
|
76
|
+
type: 'image',
|
|
77
|
+
data: result.data,
|
|
78
|
+
mimeType: result.mimeType,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// File result - return file path as text (for large screenshots)
|
|
84
|
+
if (isFileResult(result)) {
|
|
85
|
+
const sizeMB = (result.sizeBytes / 1024 / 1024).toFixed(2);
|
|
86
|
+
return {
|
|
87
|
+
content: [
|
|
88
|
+
{
|
|
89
|
+
type: 'text',
|
|
90
|
+
text: `Screenshot saved to: ${result.path} (${sizeMB} MB, ${result.mimeType})`,
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
70
95
|
// When outputSchema is defined, return structuredContent for MCP validation
|
|
71
96
|
if (definition.outputSchema) {
|
|
72
97
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EACL,SAAS,GAGV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module snapshot/extractors
|
|
7
7
|
*/
|
|
8
|
-
export type { RawDomNode, RawAxNode, AxProperty, AxPropertyValue, NodeLayoutInfo, RawNodeData, ExtractorContext, DomExtractionResult, AxExtractionResult, LayoutExtractionResult, } from './types.js';
|
|
8
|
+
export type { RawDomNode, RawAxNode, AxProperty, AxPropertyValue, NodeLayoutInfo, RawNodeData, ExtractorContext, DomExtractionResult, AxExtractionResult, LayoutExtractionResult, InteractivitySignals, } from './types.js';
|
|
9
9
|
export { createExtractorContext, isValidRawDomNode, isValidRawAxNode, isValidNodeLayoutInfo, DOM_NODE_TYPES, INTERACTIVE_AX_ROLES, READABLE_AX_ROLES, STRUCTURAL_AX_ROLES, } from './types.js';
|
|
10
10
|
export { extractDom } from './dom-extractor.js';
|
|
11
11
|
export { extractAx, classifyAxRole, type RoleClassification } from './ax-extractor.js';
|
|
@@ -16,4 +16,5 @@ export { resolveRegion } from './region-resolver.js';
|
|
|
16
16
|
export { buildLocators } from './locator-builder.js';
|
|
17
17
|
export { resolveGrouping, type GroupingInfo } from './grouping-resolver.js';
|
|
18
18
|
export { extractAttributes, sanitizeUrl, type AttributeExtractionOptions, } from './attribute-extractor.js';
|
|
19
|
+
export { detectInteractivity } from './interactivity-detector.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/snapshot/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/snapshot/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG5F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,KAAK,0BAA0B,GAChC,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -24,4 +24,6 @@ export { buildLocators } from './locator-builder.js';
|
|
|
24
24
|
export { resolveGrouping } from './grouping-resolver.js';
|
|
25
25
|
// Attribute Extractor
|
|
26
26
|
export { extractAttributes, sanitizeUrl, } from './attribute-extractor.js';
|
|
27
|
+
// Interactivity Detector
|
|
28
|
+
export { detectInteractivity } from './interactivity-detector.js';
|
|
27
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/snapshot/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/snapshot/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,cAAc,EAA2B,MAAM,mBAAmB,CAAC;AAEvF,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE5F,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAA0C,MAAM,qBAAqB,CAAC;AAE3F,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAqB,MAAM,wBAAwB,CAAC;AAE5E,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAElC,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactivity Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects implicit interactivity signals on non-semantic elements:
|
|
5
|
+
* - Event listeners (click/mousedown/pointerdown) on self or ancestors
|
|
6
|
+
* - CSS cursor: pointer
|
|
7
|
+
* - tabindex >= 0
|
|
8
|
+
*
|
|
9
|
+
* @module snapshot/extractors/interactivity-detector
|
|
10
|
+
*
|
|
11
|
+
* CDP Domains:
|
|
12
|
+
* - DOM: pushNodesByBackendIdsToFrontend, resolveNode
|
|
13
|
+
* - CSS: getComputedStyleForNode
|
|
14
|
+
* - DOMDebugger: getEventListeners
|
|
15
|
+
* - Runtime: releaseObject
|
|
16
|
+
*/
|
|
17
|
+
import type { ExtractorContext, RawDomNode, InteractivitySignals } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Detect implicit interactivity signals on non-interactive elements.
|
|
20
|
+
*
|
|
21
|
+
* @param ctx - Extractor context with CDP client
|
|
22
|
+
* @param candidateIds - backendNodeIds of non-interactive nodes to check
|
|
23
|
+
* @param domNodes - DOM tree for attribute lookup and ancestor walking
|
|
24
|
+
* @returns Map of backendNodeId → InteractivitySignals (only for nodes with positive signals)
|
|
25
|
+
*/
|
|
26
|
+
export declare function detectInteractivity(ctx: ExtractorContext, candidateIds: number[], domNodes: Map<number, RawDomNode>): Promise<Map<number, InteractivitySignals>>;
|
|
27
|
+
//# sourceMappingURL=interactivity-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactivity-detector.d.ts","sourceRoot":"","sources":["../../../../src/snapshot/extractors/interactivity-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAsBrF;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAyI5C"}
|