@ai2qa/local-agent 0.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/README.md +254 -0
- package/bin/ai2qa-agent +12 -0
- package/dist/browser/connection.d.ts +80 -0
- package/dist/browser/connection.d.ts.map +1 -0
- package/dist/browser/connection.js +165 -0
- package/dist/browser/connection.js.map +1 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +231 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +189 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +56 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +387 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/click.d.ts +12 -0
- package/dist/tools/click.d.ts.map +1 -0
- package/dist/tools/click.js +61 -0
- package/dist/tools/click.js.map +1 -0
- package/dist/tools/evaluate.d.ts +9 -0
- package/dist/tools/evaluate.d.ts.map +1 -0
- package/dist/tools/evaluate.js +77 -0
- package/dist/tools/evaluate.js.map +1 -0
- package/dist/tools/fill.d.ts +9 -0
- package/dist/tools/fill.d.ts.map +1 -0
- package/dist/tools/fill.js +48 -0
- package/dist/tools/fill.js.map +1 -0
- package/dist/tools/hover.d.ts +9 -0
- package/dist/tools/hover.d.ts.map +1 -0
- package/dist/tools/hover.js +44 -0
- package/dist/tools/hover.js.map +1 -0
- package/dist/tools/index.d.ts +18 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +51 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/knowledge.d.ts +56 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +98 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/navigate.d.ts +9 -0
- package/dist/tools/navigate.d.ts.map +1 -0
- package/dist/tools/navigate.js +48 -0
- package/dist/tools/navigate.js.map +1 -0
- package/dist/tools/press-key.d.ts +9 -0
- package/dist/tools/press-key.d.ts.map +1 -0
- package/dist/tools/press-key.js +38 -0
- package/dist/tools/press-key.js.map +1 -0
- package/dist/tools/report.d.ts +29 -0
- package/dist/tools/report.d.ts.map +1 -0
- package/dist/tools/report.js +92 -0
- package/dist/tools/report.js.map +1 -0
- package/dist/tools/screenshot.d.ts +9 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +54 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/snapshot.d.ts +13 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +134 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/types.d.ts +329 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +102 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/wait.d.ts +9 -0
- package/dist/tools/wait.d.ts.map +1 -0
- package/dist/tools/wait.js +64 -0
- package/dist/tools/wait.js.map +1 -0
- package/dist/transports/index.d.ts +8 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +14 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/stdio.d.ts +8 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +12 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/transports/websocket.d.ts +87 -0
- package/dist/transports/websocket.d.ts.map +1 -0
- package/dist/transports/websocket.js +200 -0
- package/dist/transports/websocket.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Snapshot Tool
|
|
4
|
+
*
|
|
5
|
+
* Captures DOM/Accessibility snapshots for AI analysis.
|
|
6
|
+
* Supports three modes:
|
|
7
|
+
* - accessibility: Uses Playwright's accessibility tree (recommended for AI)
|
|
8
|
+
* - html: Raw HTML content
|
|
9
|
+
* - text: Visible text content only
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.snapshot = snapshot;
|
|
13
|
+
const types_js_1 = require("./types.js");
|
|
14
|
+
const click_js_1 = require("./click.js");
|
|
15
|
+
/** Reference counter for generating unique IDs */
|
|
16
|
+
let refCounter = 0;
|
|
17
|
+
async function snapshot(page, params) {
|
|
18
|
+
const parseResult = types_js_1.SnapshotParamsSchema.safeParse(params);
|
|
19
|
+
if (!parseResult.success) {
|
|
20
|
+
return {
|
|
21
|
+
success: false,
|
|
22
|
+
error: `Invalid parameters: ${parseResult.error.message}`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const { verbose, mode } = parseResult.data;
|
|
26
|
+
try {
|
|
27
|
+
const url = page.url();
|
|
28
|
+
const title = await page.title();
|
|
29
|
+
let content;
|
|
30
|
+
const refs = {};
|
|
31
|
+
switch (mode) {
|
|
32
|
+
case 'accessibility':
|
|
33
|
+
content = await captureAccessibilitySnapshot(page, verbose, refs);
|
|
34
|
+
break;
|
|
35
|
+
case 'html':
|
|
36
|
+
content = await page.content();
|
|
37
|
+
break;
|
|
38
|
+
case 'text':
|
|
39
|
+
content = await page.innerText('body');
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
success: true,
|
|
44
|
+
content,
|
|
45
|
+
url,
|
|
46
|
+
title,
|
|
47
|
+
refs: Object.keys(refs).length > 0 ? refs : undefined,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
error: `Snapshot failed: ${message}`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Capture accessibility tree snapshot using Playwright's aria snapshot.
|
|
60
|
+
*/
|
|
61
|
+
async function captureAccessibilitySnapshot(page, verbose, refs) {
|
|
62
|
+
// Clear previous refs
|
|
63
|
+
(0, click_js_1.clearRefs)();
|
|
64
|
+
refCounter = 0;
|
|
65
|
+
// Use Playwright's built-in aria snapshot
|
|
66
|
+
const ariaSnapshot = await page.locator('body').ariaSnapshot();
|
|
67
|
+
// Also capture interactive elements and assign refs
|
|
68
|
+
// Note: This code runs in browser context via Playwright's evaluate
|
|
69
|
+
const interactiveElements = await page.evaluate(`(() => {
|
|
70
|
+
const elements = [];
|
|
71
|
+
const interactiveSelectors = [
|
|
72
|
+
'a[href]',
|
|
73
|
+
'button',
|
|
74
|
+
'input',
|
|
75
|
+
'select',
|
|
76
|
+
'textarea',
|
|
77
|
+
'[role="button"]',
|
|
78
|
+
'[role="link"]',
|
|
79
|
+
'[role="menuitem"]',
|
|
80
|
+
'[role="tab"]',
|
|
81
|
+
'[onclick]',
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
interactiveSelectors.forEach(sel => {
|
|
85
|
+
document.querySelectorAll(sel).forEach((el, idx) => {
|
|
86
|
+
const rect = el.getBoundingClientRect();
|
|
87
|
+
if (rect.width === 0 || rect.height === 0) return;
|
|
88
|
+
|
|
89
|
+
let selector = '';
|
|
90
|
+
if (el.id) {
|
|
91
|
+
selector = '#' + el.id;
|
|
92
|
+
} else if (el.getAttribute('data-testid')) {
|
|
93
|
+
selector = '[data-testid="' + el.getAttribute('data-testid') + '"]';
|
|
94
|
+
} else if (el.getAttribute('aria-label')) {
|
|
95
|
+
selector = '[aria-label="' + el.getAttribute('aria-label') + '"]';
|
|
96
|
+
} else {
|
|
97
|
+
selector = el.tagName.toLowerCase() + ':nth-of-type(' + (idx + 1) + ')';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
elements.push({
|
|
101
|
+
tag: el.tagName.toLowerCase(),
|
|
102
|
+
role: el.getAttribute('role') || el.tagName.toLowerCase(),
|
|
103
|
+
name: (el.innerText || '').slice(0, 50) || el.getAttribute('aria-label') || '',
|
|
104
|
+
selector,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
return elements;
|
|
110
|
+
})()`);
|
|
111
|
+
// Assign refs to interactive elements
|
|
112
|
+
interactiveElements.forEach(el => {
|
|
113
|
+
const refId = `ref_${refCounter++}`;
|
|
114
|
+
refs[refId] = el.selector;
|
|
115
|
+
(0, click_js_1.setRef)(refId, el.selector);
|
|
116
|
+
});
|
|
117
|
+
// Build output
|
|
118
|
+
const lines = [];
|
|
119
|
+
lines.push('=== Accessibility Snapshot ===');
|
|
120
|
+
lines.push(ariaSnapshot);
|
|
121
|
+
if (verbose && interactiveElements.length > 0) {
|
|
122
|
+
lines.push('');
|
|
123
|
+
lines.push('=== Interactive Elements (with refs) ===');
|
|
124
|
+
interactiveElements.slice(0, 50).forEach((el, idx) => {
|
|
125
|
+
const refId = `ref_${idx}`;
|
|
126
|
+
lines.push(`[${refId}] ${el.role}: "${el.name}" -> ${el.selector}`);
|
|
127
|
+
});
|
|
128
|
+
if (interactiveElements.length > 50) {
|
|
129
|
+
lines.push(`... and ${interactiveElements.length - 50} more elements`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return lines.join('\n');
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Types and Contracts
|
|
3
|
+
*
|
|
4
|
+
* Defines the interface between MCP protocol and browser automation tools.
|
|
5
|
+
* These contracts MUST match the existing AI2QA cloud MCP server.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
/** Base result for all tool operations */
|
|
9
|
+
export interface ToolResult {
|
|
10
|
+
readonly success: boolean;
|
|
11
|
+
readonly error?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Navigate tool */
|
|
14
|
+
export declare const NavigateParamsSchema: z.ZodObject<{
|
|
15
|
+
url: z.ZodString;
|
|
16
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["goto", "reload", "back", "forward"]>>>;
|
|
17
|
+
timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
url: string;
|
|
20
|
+
type: "goto" | "reload" | "back" | "forward";
|
|
21
|
+
timeout: number;
|
|
22
|
+
}, {
|
|
23
|
+
url: string;
|
|
24
|
+
type?: "goto" | "reload" | "back" | "forward" | undefined;
|
|
25
|
+
timeout?: number | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
export type NavigateParams = z.infer<typeof NavigateParamsSchema>;
|
|
28
|
+
export interface NavigateResult extends ToolResult {
|
|
29
|
+
readonly url?: string;
|
|
30
|
+
readonly title?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Click tool */
|
|
33
|
+
export declare const ClickParamsSchema: z.ZodEffects<z.ZodObject<{
|
|
34
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
35
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
36
|
+
button: z.ZodDefault<z.ZodOptional<z.ZodEnum<["left", "right", "middle"]>>>;
|
|
37
|
+
clickCount: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
38
|
+
timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
39
|
+
}, "strip", z.ZodTypeAny, {
|
|
40
|
+
timeout: number;
|
|
41
|
+
button: "left" | "right" | "middle";
|
|
42
|
+
clickCount: number;
|
|
43
|
+
selector?: string | undefined;
|
|
44
|
+
ref?: string | undefined;
|
|
45
|
+
}, {
|
|
46
|
+
timeout?: number | undefined;
|
|
47
|
+
selector?: string | undefined;
|
|
48
|
+
ref?: string | undefined;
|
|
49
|
+
button?: "left" | "right" | "middle" | undefined;
|
|
50
|
+
clickCount?: number | undefined;
|
|
51
|
+
}>, {
|
|
52
|
+
timeout: number;
|
|
53
|
+
button: "left" | "right" | "middle";
|
|
54
|
+
clickCount: number;
|
|
55
|
+
selector?: string | undefined;
|
|
56
|
+
ref?: string | undefined;
|
|
57
|
+
}, {
|
|
58
|
+
timeout?: number | undefined;
|
|
59
|
+
selector?: string | undefined;
|
|
60
|
+
ref?: string | undefined;
|
|
61
|
+
button?: "left" | "right" | "middle" | undefined;
|
|
62
|
+
clickCount?: number | undefined;
|
|
63
|
+
}>;
|
|
64
|
+
export type ClickParams = z.infer<typeof ClickParamsSchema>;
|
|
65
|
+
export interface ClickResult extends ToolResult {
|
|
66
|
+
readonly selector?: string;
|
|
67
|
+
}
|
|
68
|
+
/** Fill tool */
|
|
69
|
+
export declare const FillParamsSchema: z.ZodEffects<z.ZodObject<{
|
|
70
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
71
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
72
|
+
value: z.ZodString;
|
|
73
|
+
clear: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
74
|
+
timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
75
|
+
}, "strip", z.ZodTypeAny, {
|
|
76
|
+
value: string;
|
|
77
|
+
timeout: number;
|
|
78
|
+
clear: boolean;
|
|
79
|
+
selector?: string | undefined;
|
|
80
|
+
ref?: string | undefined;
|
|
81
|
+
}, {
|
|
82
|
+
value: string;
|
|
83
|
+
timeout?: number | undefined;
|
|
84
|
+
selector?: string | undefined;
|
|
85
|
+
ref?: string | undefined;
|
|
86
|
+
clear?: boolean | undefined;
|
|
87
|
+
}>, {
|
|
88
|
+
value: string;
|
|
89
|
+
timeout: number;
|
|
90
|
+
clear: boolean;
|
|
91
|
+
selector?: string | undefined;
|
|
92
|
+
ref?: string | undefined;
|
|
93
|
+
}, {
|
|
94
|
+
value: string;
|
|
95
|
+
timeout?: number | undefined;
|
|
96
|
+
selector?: string | undefined;
|
|
97
|
+
ref?: string | undefined;
|
|
98
|
+
clear?: boolean | undefined;
|
|
99
|
+
}>;
|
|
100
|
+
export type FillParams = z.infer<typeof FillParamsSchema>;
|
|
101
|
+
export interface FillResult extends ToolResult {
|
|
102
|
+
readonly selector?: string;
|
|
103
|
+
}
|
|
104
|
+
/** Hover tool */
|
|
105
|
+
export declare const HoverParamsSchema: z.ZodEffects<z.ZodObject<{
|
|
106
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
107
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
108
|
+
timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
109
|
+
}, "strip", z.ZodTypeAny, {
|
|
110
|
+
timeout: number;
|
|
111
|
+
selector?: string | undefined;
|
|
112
|
+
ref?: string | undefined;
|
|
113
|
+
}, {
|
|
114
|
+
timeout?: number | undefined;
|
|
115
|
+
selector?: string | undefined;
|
|
116
|
+
ref?: string | undefined;
|
|
117
|
+
}>, {
|
|
118
|
+
timeout: number;
|
|
119
|
+
selector?: string | undefined;
|
|
120
|
+
ref?: string | undefined;
|
|
121
|
+
}, {
|
|
122
|
+
timeout?: number | undefined;
|
|
123
|
+
selector?: string | undefined;
|
|
124
|
+
ref?: string | undefined;
|
|
125
|
+
}>;
|
|
126
|
+
export type HoverParams = z.infer<typeof HoverParamsSchema>;
|
|
127
|
+
export interface HoverResult extends ToolResult {
|
|
128
|
+
readonly selector?: string;
|
|
129
|
+
}
|
|
130
|
+
/** Press key tool */
|
|
131
|
+
export declare const PressKeyParamsSchema: z.ZodObject<{
|
|
132
|
+
key: z.ZodString;
|
|
133
|
+
modifiers: z.ZodOptional<z.ZodArray<z.ZodEnum<["Alt", "Control", "Meta", "Shift"]>, "many">>;
|
|
134
|
+
}, "strip", z.ZodTypeAny, {
|
|
135
|
+
key: string;
|
|
136
|
+
modifiers?: ("Alt" | "Control" | "Meta" | "Shift")[] | undefined;
|
|
137
|
+
}, {
|
|
138
|
+
key: string;
|
|
139
|
+
modifiers?: ("Alt" | "Control" | "Meta" | "Shift")[] | undefined;
|
|
140
|
+
}>;
|
|
141
|
+
export type PressKeyParams = z.infer<typeof PressKeyParamsSchema>;
|
|
142
|
+
export interface PressKeyResult extends ToolResult {
|
|
143
|
+
readonly key?: string;
|
|
144
|
+
}
|
|
145
|
+
/** Screenshot tool */
|
|
146
|
+
export declare const ScreenshotParamsSchema: z.ZodObject<{
|
|
147
|
+
fullPage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
148
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
149
|
+
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["png", "jpeg"]>>>;
|
|
150
|
+
quality: z.ZodOptional<z.ZodNumber>;
|
|
151
|
+
}, "strip", z.ZodTypeAny, {
|
|
152
|
+
fullPage: boolean;
|
|
153
|
+
format: "png" | "jpeg";
|
|
154
|
+
selector?: string | undefined;
|
|
155
|
+
quality?: number | undefined;
|
|
156
|
+
}, {
|
|
157
|
+
selector?: string | undefined;
|
|
158
|
+
fullPage?: boolean | undefined;
|
|
159
|
+
format?: "png" | "jpeg" | undefined;
|
|
160
|
+
quality?: number | undefined;
|
|
161
|
+
}>;
|
|
162
|
+
export type ScreenshotParams = z.infer<typeof ScreenshotParamsSchema>;
|
|
163
|
+
export interface ScreenshotResult extends ToolResult {
|
|
164
|
+
readonly type?: 'image';
|
|
165
|
+
readonly data?: string;
|
|
166
|
+
readonly mimeType?: string;
|
|
167
|
+
}
|
|
168
|
+
/** Snapshot tool (DOM/Accessibility snapshot) */
|
|
169
|
+
export declare const SnapshotParamsSchema: z.ZodObject<{
|
|
170
|
+
verbose: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
171
|
+
mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["accessibility", "html", "text"]>>>;
|
|
172
|
+
}, "strip", z.ZodTypeAny, {
|
|
173
|
+
mode: "accessibility" | "html" | "text";
|
|
174
|
+
verbose: boolean;
|
|
175
|
+
}, {
|
|
176
|
+
mode?: "accessibility" | "html" | "text" | undefined;
|
|
177
|
+
verbose?: boolean | undefined;
|
|
178
|
+
}>;
|
|
179
|
+
export type SnapshotParams = z.infer<typeof SnapshotParamsSchema>;
|
|
180
|
+
export interface SnapshotResult extends ToolResult {
|
|
181
|
+
readonly content?: string;
|
|
182
|
+
readonly url?: string;
|
|
183
|
+
readonly title?: string;
|
|
184
|
+
readonly refs?: Record<string, string>;
|
|
185
|
+
}
|
|
186
|
+
/** Wait tool */
|
|
187
|
+
export declare const WaitParamsSchema: z.ZodObject<{
|
|
188
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
189
|
+
text: z.ZodOptional<z.ZodString>;
|
|
190
|
+
ms: z.ZodOptional<z.ZodNumber>;
|
|
191
|
+
state: z.ZodDefault<z.ZodOptional<z.ZodEnum<["attached", "detached", "visible", "hidden"]>>>;
|
|
192
|
+
timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
193
|
+
}, "strip", z.ZodTypeAny, {
|
|
194
|
+
timeout: number;
|
|
195
|
+
state: "attached" | "detached" | "visible" | "hidden";
|
|
196
|
+
selector?: string | undefined;
|
|
197
|
+
text?: string | undefined;
|
|
198
|
+
ms?: number | undefined;
|
|
199
|
+
}, {
|
|
200
|
+
timeout?: number | undefined;
|
|
201
|
+
selector?: string | undefined;
|
|
202
|
+
text?: string | undefined;
|
|
203
|
+
ms?: number | undefined;
|
|
204
|
+
state?: "attached" | "detached" | "visible" | "hidden" | undefined;
|
|
205
|
+
}>;
|
|
206
|
+
export type WaitParams = z.infer<typeof WaitParamsSchema>;
|
|
207
|
+
export interface WaitResult extends ToolResult {
|
|
208
|
+
readonly waited?: number;
|
|
209
|
+
}
|
|
210
|
+
/** Evaluate tool (run JS in page context) */
|
|
211
|
+
export declare const EvaluateParamsSchema: z.ZodObject<{
|
|
212
|
+
script: z.ZodString;
|
|
213
|
+
args: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
|
|
214
|
+
}, "strip", z.ZodTypeAny, {
|
|
215
|
+
script: string;
|
|
216
|
+
args?: unknown[] | undefined;
|
|
217
|
+
}, {
|
|
218
|
+
script: string;
|
|
219
|
+
args?: unknown[] | undefined;
|
|
220
|
+
}>;
|
|
221
|
+
export type EvaluateParams = z.infer<typeof EvaluateParamsSchema>;
|
|
222
|
+
export interface EvaluateResult extends ToolResult {
|
|
223
|
+
readonly result?: unknown;
|
|
224
|
+
}
|
|
225
|
+
/** Union of all tool parameters */
|
|
226
|
+
export type AnyToolParams = NavigateParams | ClickParams | FillParams | HoverParams | PressKeyParams | ScreenshotParams | SnapshotParams | WaitParams | EvaluateParams | ReportResultsParams;
|
|
227
|
+
/** Union of all tool results */
|
|
228
|
+
export type AnyToolResult = NavigateResult | ClickResult | FillResult | HoverResult | PressKeyResult | ScreenshotResult | SnapshotResult | WaitResult | EvaluateResult | ReportResultsResult;
|
|
229
|
+
/** Report results tool (for knowledge learning) */
|
|
230
|
+
export declare const ReportResultsParamsSchema: z.ZodObject<{
|
|
231
|
+
domain: z.ZodString;
|
|
232
|
+
results: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
233
|
+
patternKey: z.ZodString;
|
|
234
|
+
selectorUsed: z.ZodOptional<z.ZodString>;
|
|
235
|
+
success: z.ZodBoolean;
|
|
236
|
+
durationMs: z.ZodOptional<z.ZodNumber>;
|
|
237
|
+
errorMessage: z.ZodOptional<z.ZodString>;
|
|
238
|
+
}, "strip", z.ZodTypeAny, {
|
|
239
|
+
success: boolean;
|
|
240
|
+
patternKey: string;
|
|
241
|
+
selectorUsed?: string | undefined;
|
|
242
|
+
durationMs?: number | undefined;
|
|
243
|
+
errorMessage?: string | undefined;
|
|
244
|
+
}, {
|
|
245
|
+
success: boolean;
|
|
246
|
+
patternKey: string;
|
|
247
|
+
selectorUsed?: string | undefined;
|
|
248
|
+
durationMs?: number | undefined;
|
|
249
|
+
errorMessage?: string | undefined;
|
|
250
|
+
}>, "many">>;
|
|
251
|
+
newPatterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
252
|
+
key: z.ZodString;
|
|
253
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
254
|
+
selectorType: z.ZodOptional<z.ZodEnum<["CSS", "XPATH", "TEXT", "ARIA", "DATA_TESTID"]>>;
|
|
255
|
+
patternType: z.ZodOptional<z.ZodEnum<["SELECTOR", "TIMING", "AUTH", "QUIRK"]>>;
|
|
256
|
+
value: z.ZodOptional<z.ZodString>;
|
|
257
|
+
description: z.ZodOptional<z.ZodString>;
|
|
258
|
+
}, "strip", z.ZodTypeAny, {
|
|
259
|
+
key: string;
|
|
260
|
+
value?: string | undefined;
|
|
261
|
+
selector?: string | undefined;
|
|
262
|
+
selectorType?: "CSS" | "XPATH" | "TEXT" | "ARIA" | "DATA_TESTID" | undefined;
|
|
263
|
+
patternType?: "SELECTOR" | "TIMING" | "AUTH" | "QUIRK" | undefined;
|
|
264
|
+
description?: string | undefined;
|
|
265
|
+
}, {
|
|
266
|
+
key: string;
|
|
267
|
+
value?: string | undefined;
|
|
268
|
+
selector?: string | undefined;
|
|
269
|
+
selectorType?: "CSS" | "XPATH" | "TEXT" | "ARIA" | "DATA_TESTID" | undefined;
|
|
270
|
+
patternType?: "SELECTOR" | "TIMING" | "AUTH" | "QUIRK" | undefined;
|
|
271
|
+
description?: string | undefined;
|
|
272
|
+
}>, "many">>;
|
|
273
|
+
}, "strip", z.ZodTypeAny, {
|
|
274
|
+
domain: string;
|
|
275
|
+
results?: {
|
|
276
|
+
success: boolean;
|
|
277
|
+
patternKey: string;
|
|
278
|
+
selectorUsed?: string | undefined;
|
|
279
|
+
durationMs?: number | undefined;
|
|
280
|
+
errorMessage?: string | undefined;
|
|
281
|
+
}[] | undefined;
|
|
282
|
+
newPatterns?: {
|
|
283
|
+
key: string;
|
|
284
|
+
value?: string | undefined;
|
|
285
|
+
selector?: string | undefined;
|
|
286
|
+
selectorType?: "CSS" | "XPATH" | "TEXT" | "ARIA" | "DATA_TESTID" | undefined;
|
|
287
|
+
patternType?: "SELECTOR" | "TIMING" | "AUTH" | "QUIRK" | undefined;
|
|
288
|
+
description?: string | undefined;
|
|
289
|
+
}[] | undefined;
|
|
290
|
+
}, {
|
|
291
|
+
domain: string;
|
|
292
|
+
results?: {
|
|
293
|
+
success: boolean;
|
|
294
|
+
patternKey: string;
|
|
295
|
+
selectorUsed?: string | undefined;
|
|
296
|
+
durationMs?: number | undefined;
|
|
297
|
+
errorMessage?: string | undefined;
|
|
298
|
+
}[] | undefined;
|
|
299
|
+
newPatterns?: {
|
|
300
|
+
key: string;
|
|
301
|
+
value?: string | undefined;
|
|
302
|
+
selector?: string | undefined;
|
|
303
|
+
selectorType?: "CSS" | "XPATH" | "TEXT" | "ARIA" | "DATA_TESTID" | undefined;
|
|
304
|
+
patternType?: "SELECTOR" | "TIMING" | "AUTH" | "QUIRK" | undefined;
|
|
305
|
+
description?: string | undefined;
|
|
306
|
+
}[] | undefined;
|
|
307
|
+
}>;
|
|
308
|
+
export type ReportResultsParams = z.infer<typeof ReportResultsParamsSchema>;
|
|
309
|
+
export interface ReportResultsResult extends ToolResult {
|
|
310
|
+
readonly patternsStored?: number;
|
|
311
|
+
readonly patternsUpdated?: number;
|
|
312
|
+
readonly message?: string;
|
|
313
|
+
}
|
|
314
|
+
/** Tool name constants */
|
|
315
|
+
export declare const TOOL_NAMES: {
|
|
316
|
+
readonly NAVIGATE: "navigate_page";
|
|
317
|
+
readonly CLICK: "click";
|
|
318
|
+
readonly FILL: "fill";
|
|
319
|
+
readonly HOVER: "hover";
|
|
320
|
+
readonly PRESS_KEY: "press_key";
|
|
321
|
+
readonly SCREENSHOT: "take_screenshot";
|
|
322
|
+
readonly SNAPSHOT: "take_snapshot";
|
|
323
|
+
readonly WAIT: "wait_for";
|
|
324
|
+
readonly EVALUATE: "evaluate";
|
|
325
|
+
readonly REPORT_RESULTS: "report_test_results";
|
|
326
|
+
readonly GET_KNOWLEDGE: "get_qa_knowledge";
|
|
327
|
+
};
|
|
328
|
+
export type ToolName = typeof TOOL_NAMES[keyof typeof TOOL_NAMES];
|
|
329
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool Types and Contracts
|
|
4
|
+
*
|
|
5
|
+
* Defines the interface between MCP protocol and browser automation tools.
|
|
6
|
+
* These contracts MUST match the existing AI2QA cloud MCP server.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TOOL_NAMES = exports.ReportResultsParamsSchema = exports.EvaluateParamsSchema = exports.WaitParamsSchema = exports.SnapshotParamsSchema = exports.ScreenshotParamsSchema = exports.PressKeyParamsSchema = exports.HoverParamsSchema = exports.FillParamsSchema = exports.ClickParamsSchema = exports.NavigateParamsSchema = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
/** Navigate tool */
|
|
12
|
+
exports.NavigateParamsSchema = zod_1.z.object({
|
|
13
|
+
url: zod_1.z.string().url(),
|
|
14
|
+
type: zod_1.z.enum(['goto', 'reload', 'back', 'forward']).optional().default('goto'),
|
|
15
|
+
timeout: zod_1.z.number().optional().default(30000),
|
|
16
|
+
});
|
|
17
|
+
/** Click tool */
|
|
18
|
+
exports.ClickParamsSchema = zod_1.z.object({
|
|
19
|
+
selector: zod_1.z.string().optional(),
|
|
20
|
+
ref: zod_1.z.string().optional(),
|
|
21
|
+
button: zod_1.z.enum(['left', 'right', 'middle']).optional().default('left'),
|
|
22
|
+
clickCount: zod_1.z.number().optional().default(1),
|
|
23
|
+
timeout: zod_1.z.number().optional().default(10000),
|
|
24
|
+
}).refine(data => data.selector !== undefined || data.ref !== undefined, { message: 'Either selector or ref must be provided' });
|
|
25
|
+
/** Fill tool */
|
|
26
|
+
exports.FillParamsSchema = zod_1.z.object({
|
|
27
|
+
selector: zod_1.z.string().optional(),
|
|
28
|
+
ref: zod_1.z.string().optional(),
|
|
29
|
+
value: zod_1.z.string(),
|
|
30
|
+
clear: zod_1.z.boolean().optional().default(true),
|
|
31
|
+
timeout: zod_1.z.number().optional().default(10000),
|
|
32
|
+
}).refine(data => data.selector !== undefined || data.ref !== undefined, { message: 'Either selector or ref must be provided' });
|
|
33
|
+
/** Hover tool */
|
|
34
|
+
exports.HoverParamsSchema = zod_1.z.object({
|
|
35
|
+
selector: zod_1.z.string().optional(),
|
|
36
|
+
ref: zod_1.z.string().optional(),
|
|
37
|
+
timeout: zod_1.z.number().optional().default(10000),
|
|
38
|
+
}).refine(data => data.selector !== undefined || data.ref !== undefined, { message: 'Either selector or ref must be provided' });
|
|
39
|
+
/** Press key tool */
|
|
40
|
+
exports.PressKeyParamsSchema = zod_1.z.object({
|
|
41
|
+
key: zod_1.z.string(),
|
|
42
|
+
modifiers: zod_1.z.array(zod_1.z.enum(['Alt', 'Control', 'Meta', 'Shift'])).optional(),
|
|
43
|
+
});
|
|
44
|
+
/** Screenshot tool */
|
|
45
|
+
exports.ScreenshotParamsSchema = zod_1.z.object({
|
|
46
|
+
fullPage: zod_1.z.boolean().optional().default(false),
|
|
47
|
+
selector: zod_1.z.string().optional(),
|
|
48
|
+
format: zod_1.z.enum(['png', 'jpeg']).optional().default('png'),
|
|
49
|
+
quality: zod_1.z.number().min(0).max(100).optional(),
|
|
50
|
+
});
|
|
51
|
+
/** Snapshot tool (DOM/Accessibility snapshot) */
|
|
52
|
+
exports.SnapshotParamsSchema = zod_1.z.object({
|
|
53
|
+
verbose: zod_1.z.boolean().optional().default(false),
|
|
54
|
+
mode: zod_1.z.enum(['accessibility', 'html', 'text']).optional().default('accessibility'),
|
|
55
|
+
});
|
|
56
|
+
/** Wait tool */
|
|
57
|
+
exports.WaitParamsSchema = zod_1.z.object({
|
|
58
|
+
selector: zod_1.z.string().optional(),
|
|
59
|
+
text: zod_1.z.string().optional(),
|
|
60
|
+
ms: zod_1.z.number().optional(),
|
|
61
|
+
state: zod_1.z.enum(['attached', 'detached', 'visible', 'hidden']).optional().default('visible'),
|
|
62
|
+
timeout: zod_1.z.number().optional().default(30000),
|
|
63
|
+
});
|
|
64
|
+
/** Evaluate tool (run JS in page context) */
|
|
65
|
+
exports.EvaluateParamsSchema = zod_1.z.object({
|
|
66
|
+
script: zod_1.z.string(),
|
|
67
|
+
args: zod_1.z.array(zod_1.z.unknown()).optional(),
|
|
68
|
+
});
|
|
69
|
+
/** Report results tool (for knowledge learning) */
|
|
70
|
+
exports.ReportResultsParamsSchema = zod_1.z.object({
|
|
71
|
+
domain: zod_1.z.string(),
|
|
72
|
+
results: zod_1.z.array(zod_1.z.object({
|
|
73
|
+
patternKey: zod_1.z.string(),
|
|
74
|
+
selectorUsed: zod_1.z.string().optional(),
|
|
75
|
+
success: zod_1.z.boolean(),
|
|
76
|
+
durationMs: zod_1.z.number().optional(),
|
|
77
|
+
errorMessage: zod_1.z.string().optional(),
|
|
78
|
+
})).optional(),
|
|
79
|
+
newPatterns: zod_1.z.array(zod_1.z.object({
|
|
80
|
+
key: zod_1.z.string(),
|
|
81
|
+
selector: zod_1.z.string().optional(),
|
|
82
|
+
selectorType: zod_1.z.enum(['CSS', 'XPATH', 'TEXT', 'ARIA', 'DATA_TESTID']).optional(),
|
|
83
|
+
patternType: zod_1.z.enum(['SELECTOR', 'TIMING', 'AUTH', 'QUIRK']).optional(),
|
|
84
|
+
value: zod_1.z.string().optional(),
|
|
85
|
+
description: zod_1.z.string().optional(),
|
|
86
|
+
})).optional(),
|
|
87
|
+
});
|
|
88
|
+
/** Tool name constants */
|
|
89
|
+
exports.TOOL_NAMES = {
|
|
90
|
+
NAVIGATE: 'navigate_page',
|
|
91
|
+
CLICK: 'click',
|
|
92
|
+
FILL: 'fill',
|
|
93
|
+
HOVER: 'hover',
|
|
94
|
+
PRESS_KEY: 'press_key',
|
|
95
|
+
SCREENSHOT: 'take_screenshot',
|
|
96
|
+
SNAPSHOT: 'take_snapshot',
|
|
97
|
+
WAIT: 'wait_for',
|
|
98
|
+
EVALUATE: 'evaluate',
|
|
99
|
+
REPORT_RESULTS: 'report_test_results',
|
|
100
|
+
GET_KNOWLEDGE: 'get_qa_knowledge',
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wait Tool
|
|
3
|
+
*
|
|
4
|
+
* Waits for elements, text, or specified duration.
|
|
5
|
+
*/
|
|
6
|
+
import type { Page } from 'playwright';
|
|
7
|
+
import { WaitResult } from './types.js';
|
|
8
|
+
export declare function wait(page: Page, params: unknown): Promise<WaitResult>;
|
|
9
|
+
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/tools/wait.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CA4D3E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Wait Tool
|
|
4
|
+
*
|
|
5
|
+
* Waits for elements, text, or specified duration.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.wait = wait;
|
|
9
|
+
const types_js_1 = require("./types.js");
|
|
10
|
+
async function wait(page, params) {
|
|
11
|
+
const parseResult = types_js_1.WaitParamsSchema.safeParse(params);
|
|
12
|
+
if (!parseResult.success) {
|
|
13
|
+
return {
|
|
14
|
+
success: false,
|
|
15
|
+
error: `Invalid parameters: ${parseResult.error.message}`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const { selector, text, ms, state, timeout } = parseResult.data;
|
|
19
|
+
const startTime = Date.now();
|
|
20
|
+
try {
|
|
21
|
+
// If ms is specified, wait for that duration
|
|
22
|
+
if (ms !== undefined) {
|
|
23
|
+
await page.waitForTimeout(ms);
|
|
24
|
+
return {
|
|
25
|
+
success: true,
|
|
26
|
+
waited: ms,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// If selector is specified, wait for element
|
|
30
|
+
if (selector) {
|
|
31
|
+
await page.waitForSelector(selector, {
|
|
32
|
+
state,
|
|
33
|
+
timeout,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
success: true,
|
|
37
|
+
waited: Date.now() - startTime,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// If text is specified, wait for text to appear
|
|
41
|
+
if (text) {
|
|
42
|
+
await page.waitForFunction(`document.body.innerText.includes(${JSON.stringify(text)})`, { timeout });
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
waited: Date.now() - startTime,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Default: wait for page to be stable (networkidle)
|
|
49
|
+
await page.waitForLoadState('domcontentloaded', { timeout });
|
|
50
|
+
return {
|
|
51
|
+
success: true,
|
|
52
|
+
waited: Date.now() - startTime,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
error: `Wait failed: ${message}`,
|
|
60
|
+
waited: Date.now() - startTime,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=wait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/tools/wait.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAKH,oBA4DC;AA9DD,yCAA0D;AAEnD,KAAK,UAAU,IAAI,CAAC,IAAU,EAAE,MAAe;IAClD,MAAM,WAAW,GAAG,2BAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uBAAuB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACD,6CAA6C;QAC7C,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE;aACb,CAAC;QACN,CAAC;QAED,6CAA6C;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;gBACjC,KAAK;gBACL,OAAO;aACV,CAAC,CAAC;YACH,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACN,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,IAAI,CAAC,eAAe,CACtB,oCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAC3D,EAAE,OAAO,EAAE,CACd,CAAC;YACF,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACN,CAAC;QAED,oDAAoD;QACpD,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO;YACH,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,gBAAgB,OAAO,EAAE;YAChC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACN,CAAC;AACL,CAAC"}
|