@cotestdev/ai-runner 0.0.1
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 +263 -0
- package/dist/agents/heal-agent.d.ts +30 -0
- package/dist/agents/heal-agent.d.ts.map +1 -0
- package/dist/agents/heal-agent.js +76 -0
- package/dist/agents/heal-agent.js.map +1 -0
- package/dist/agents/healer.d.ts +73 -0
- package/dist/agents/healer.d.ts.map +1 -0
- package/dist/agents/healer.js +538 -0
- package/dist/agents/healer.js.map +1 -0
- package/dist/agents/tools/form.d.ts +22 -0
- package/dist/agents/tools/form.d.ts.map +1 -0
- package/dist/agents/tools/form.js +134 -0
- package/dist/agents/tools/form.js.map +1 -0
- package/dist/agents/tools/index.d.ts +13 -0
- package/dist/agents/tools/index.d.ts.map +1 -0
- package/dist/agents/tools/index.js +33 -0
- package/dist/agents/tools/index.js.map +1 -0
- package/dist/agents/tools/navigate.d.ts +22 -0
- package/dist/agents/tools/navigate.d.ts.map +1 -0
- package/dist/agents/tools/navigate.js +74 -0
- package/dist/agents/tools/navigate.js.map +1 -0
- package/dist/agents/tools/snapshot.d.ts +22 -0
- package/dist/agents/tools/snapshot.d.ts.map +1 -0
- package/dist/agents/tools/snapshot.js +110 -0
- package/dist/agents/tools/snapshot.js.map +1 -0
- package/dist/agents/tools/verify.d.ts +34 -0
- package/dist/agents/tools/verify.d.ts.map +1 -0
- package/dist/agents/tools/verify.js +169 -0
- package/dist/agents/tools/verify.js.map +1 -0
- package/dist/agents/tools/wait.d.ts +22 -0
- package/dist/agents/tools/wait.d.ts.map +1 -0
- package/dist/agents/tools/wait.js +104 -0
- package/dist/agents/tools/wait.js.map +1 -0
- package/dist/agents/types.d.ts +51 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +6 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/ai-runner/src/agents/logger.d.ts +7 -0
- package/dist/ai-runner/src/agents/logger.d.ts.map +1 -0
- package/dist/ai-runner/src/agents/logger.js +22 -0
- package/dist/ai-runner/src/agents/logger.js.map +1 -0
- package/dist/ai-runner/src/agents/playwright-executor.d.ts +24 -0
- package/dist/ai-runner/src/agents/playwright-executor.d.ts.map +1 -0
- package/dist/ai-runner/src/agents/playwright-executor.js +226 -0
- package/dist/ai-runner/src/agents/playwright-executor.js.map +1 -0
- package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.d.ts +33 -0
- package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.d.ts.map +1 -0
- package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.js +146 -0
- package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.js.map +1 -0
- package/dist/ai-runner/src/agents/types.d.ts +55 -0
- package/dist/ai-runner/src/agents/types.d.ts.map +1 -0
- package/dist/ai-runner/src/agents/types.js +6 -0
- package/dist/ai-runner/src/agents/types.js.map +1 -0
- package/dist/ai-runner/src/examples/test-final.d.ts +6 -0
- package/dist/ai-runner/src/examples/test-final.d.ts.map +1 -0
- package/dist/ai-runner/src/examples/test-final.js +73 -0
- package/dist/ai-runner/src/examples/test-final.js.map +1 -0
- package/dist/ai-runner/src/examples/test-simple-tools.d.ts +6 -0
- package/dist/ai-runner/src/examples/test-simple-tools.d.ts.map +1 -0
- package/dist/ai-runner/src/examples/test-simple-tools.js +149 -0
- package/dist/ai-runner/src/examples/test-simple-tools.js.map +1 -0
- package/dist/ai-runner/src/examples/test-working.d.ts +5 -0
- package/dist/ai-runner/src/examples/test-working.d.ts.map +1 -0
- package/dist/ai-runner/src/examples/test-working.js +43 -0
- package/dist/ai-runner/src/examples/test-working.js.map +1 -0
- package/dist/ai-runner/src/examples/v-test-backend-adapter.d.ts +15 -0
- package/dist/ai-runner/src/examples/v-test-backend-adapter.d.ts.map +1 -0
- package/dist/ai-runner/src/examples/v-test-backend-adapter.js +240 -0
- package/dist/ai-runner/src/examples/v-test-backend-adapter.js.map +1 -0
- package/dist/ai-runner/src/index.d.ts +8 -0
- package/dist/ai-runner/src/index.d.ts.map +1 -0
- package/dist/ai-runner/src/index.js +11 -0
- package/dist/ai-runner/src/index.js.map +1 -0
- package/dist/ai-runner/src/runner.d.ts +28 -0
- package/dist/ai-runner/src/runner.d.ts.map +1 -0
- package/dist/ai-runner/src/runner.js +176 -0
- package/dist/ai-runner/src/runner.js.map +1 -0
- package/dist/ai-runner/src/tools/index.d.ts +16 -0
- package/dist/ai-runner/src/tools/index.d.ts.map +1 -0
- package/dist/ai-runner/src/tools/index.js +35 -0
- package/dist/ai-runner/src/tools/index.js.map +1 -0
- package/dist/ai-runner/src/tools/playwright-groups.d.ts +19 -0
- package/dist/ai-runner/src/tools/playwright-groups.d.ts.map +1 -0
- package/dist/ai-runner/src/tools/playwright-groups.js +42 -0
- package/dist/ai-runner/src/tools/playwright-groups.js.map +1 -0
- package/dist/ai-runner/src/types/external.d.ts +6 -0
- package/dist/ai-runner/src/types/external.d.ts.map +1 -0
- package/dist/ai-runner/src/types/external.js +7 -0
- package/dist/ai-runner/src/types/external.js.map +1 -0
- package/dist/ai-runner/src/types/index.d.ts +95 -0
- package/dist/ai-runner/src/types/index.d.ts.map +1 -0
- package/dist/ai-runner/src/types/index.js +7 -0
- package/dist/ai-runner/src/types/index.js.map +1 -0
- package/dist/core/runner.d.ts +194 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +650 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core-infra/src/directory-validator.d.ts +29 -0
- package/dist/core-infra/src/directory-validator.d.ts.map +1 -0
- package/dist/core-infra/src/directory-validator.js +91 -0
- package/dist/core-infra/src/directory-validator.js.map +1 -0
- package/dist/core-infra/src/index.d.ts +14 -0
- package/dist/core-infra/src/index.d.ts.map +1 -0
- package/dist/core-infra/src/index.js +44 -0
- package/dist/core-infra/src/index.js.map +1 -0
- package/dist/core-infra/src/mcp/file-mcp-manager.d.ts +14 -0
- package/dist/core-infra/src/mcp/file-mcp-manager.d.ts.map +1 -0
- package/dist/core-infra/src/mcp/file-mcp-manager.js +46 -0
- package/dist/core-infra/src/mcp/file-mcp-manager.js.map +1 -0
- package/dist/core-infra/src/mcp/index.d.ts +21 -0
- package/dist/core-infra/src/mcp/index.d.ts.map +1 -0
- package/dist/core-infra/src/mcp/index.js +17 -0
- package/dist/core-infra/src/mcp/index.js.map +1 -0
- package/dist/core-infra/src/mcp/mcp-client.d.ts +128 -0
- package/dist/core-infra/src/mcp/mcp-client.d.ts.map +1 -0
- package/dist/core-infra/src/mcp/mcp-client.js +163 -0
- package/dist/core-infra/src/mcp/mcp-client.js.map +1 -0
- package/dist/core-infra/src/mcp/mcp-manager.d.ts +21 -0
- package/dist/core-infra/src/mcp/mcp-manager.d.ts.map +1 -0
- package/dist/core-infra/src/mcp/mcp-manager.js +99 -0
- package/dist/core-infra/src/mcp/mcp-manager.js.map +1 -0
- package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts +19 -0
- package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts.map +1 -0
- package/dist/core-infra/src/mcp/playwright-mcp-manager.js +120 -0
- package/dist/core-infra/src/mcp/playwright-mcp-manager.js.map +1 -0
- package/dist/core-infra/src/model.d.ts +11 -0
- package/dist/core-infra/src/model.d.ts.map +1 -0
- package/dist/core-infra/src/model.js +190 -0
- package/dist/core-infra/src/model.js.map +1 -0
- package/dist/core-infra/src/repositories/BaseRepository.d.ts +69 -0
- package/dist/core-infra/src/repositories/BaseRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/BaseRepository.js +213 -0
- package/dist/core-infra/src/repositories/BaseRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/DirectoryRepository.d.ts +70 -0
- package/dist/core-infra/src/repositories/DirectoryRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/DirectoryRepository.js +336 -0
- package/dist/core-infra/src/repositories/DirectoryRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/ExplorationRepository.d.ts +34 -0
- package/dist/core-infra/src/repositories/ExplorationRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/ExplorationRepository.js +54 -0
- package/dist/core-infra/src/repositories/ExplorationRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/FileRepository.d.ts +56 -0
- package/dist/core-infra/src/repositories/FileRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/FileRepository.js +132 -0
- package/dist/core-infra/src/repositories/FileRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts +38 -0
- package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/ModelConfigRepository.js +59 -0
- package/dist/core-infra/src/repositories/ModelConfigRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/ProjectRepository.d.ts +32 -0
- package/dist/core-infra/src/repositories/ProjectRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/ProjectRepository.js +67 -0
- package/dist/core-infra/src/repositories/ProjectRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/SettingsRepository.d.ts +19 -0
- package/dist/core-infra/src/repositories/SettingsRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/SettingsRepository.js +72 -0
- package/dist/core-infra/src/repositories/SettingsRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/TableDataRepository.d.ts +22 -0
- package/dist/core-infra/src/repositories/TableDataRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/TableDataRepository.js +33 -0
- package/dist/core-infra/src/repositories/TableDataRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/TestCaseRepository.d.ts +120 -0
- package/dist/core-infra/src/repositories/TestCaseRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/TestCaseRepository.js +463 -0
- package/dist/core-infra/src/repositories/TestCaseRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/TestPlanRepository.d.ts +35 -0
- package/dist/core-infra/src/repositories/TestPlanRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/TestPlanRepository.js +80 -0
- package/dist/core-infra/src/repositories/TestPlanRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/TestResultRepository.d.ts +30 -0
- package/dist/core-infra/src/repositories/TestResultRepository.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/TestResultRepository.js +54 -0
- package/dist/core-infra/src/repositories/TestResultRepository.js.map +1 -0
- package/dist/core-infra/src/repositories/index.d.ts +17 -0
- package/dist/core-infra/src/repositories/index.d.ts.map +1 -0
- package/dist/core-infra/src/repositories/index.js +31 -0
- package/dist/core-infra/src/repositories/index.js.map +1 -0
- package/dist/core-infra/src/storageService.d.ts +131 -0
- package/dist/core-infra/src/storageService.d.ts.map +1 -0
- package/dist/core-infra/src/storageService.js +304 -0
- package/dist/core-infra/src/storageService.js.map +1 -0
- package/dist/core-infra/src/types.d.ts +218 -0
- package/dist/core-infra/src/types.d.ts.map +1 -0
- package/dist/core-infra/src/types.js +3 -0
- package/dist/core-infra/src/types.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/types/external.d.ts +6 -0
- package/dist/types/external.d.ts.map +1 -0
- package/dist/types/external.js +7 -0
- package/dist/types/external.js.map +1 -0
- package/dist/types/index.d.ts +153 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/index.js.map +1 -0
- package/docs/PLAYWRIGHT_MCP_ADAPTER.md +132 -0
- package/docs/SCHEMA_EXTRACTION.md +224 -0
- package/package.json +43 -0
- package/playwright.config.ts +38 -0
- package/src/agents/logger.ts +20 -0
- package/src/agents/playwright-executor.ts +244 -0
- package/src/agents/tools/playwright-backend-adapter.ts +134 -0
- package/src/agents/tools/playwright-mcp-types.d.ts +71 -0
- package/src/agents/types.ts +80 -0
- package/src/index.ts +27 -0
- package/src/runner.ts +219 -0
- package/src/tools/index.ts +48 -0
- package/src/tools/playwright-groups.ts +54 -0
- package/src/types/external.ts +7 -0
- package/src/types/index.ts +118 -0
- package/tests/agent/test-heal-agent.spec.ts +69 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/agents/tools/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 等待工具 - Wait
|
|
3
|
+
*/
|
|
4
|
+
import { DynamicTool } from '@langchain/core/tools';
|
|
5
|
+
import type { Page } from 'playwright';
|
|
6
|
+
/**
|
|
7
|
+
* 创建等待时间工具
|
|
8
|
+
*/
|
|
9
|
+
export declare function createWaitForTimeTool(page: Page): DynamicTool;
|
|
10
|
+
/**
|
|
11
|
+
* 创建等待元素工具
|
|
12
|
+
*/
|
|
13
|
+
export declare function createWaitForSelectorTool(page: Page): DynamicTool;
|
|
14
|
+
/**
|
|
15
|
+
* 创建等待URL工具
|
|
16
|
+
*/
|
|
17
|
+
export declare function createWaitForURLTool(page: Page): DynamicTool;
|
|
18
|
+
/**
|
|
19
|
+
* 等待工具集
|
|
20
|
+
*/
|
|
21
|
+
export declare const waitTools: (page: Page) => DynamicTool[];
|
|
22
|
+
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/wait.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAiB7D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CA2CjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAa5D;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,WAAW,EAIjD,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 等待工具 - Wait
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.waitTools = void 0;
|
|
7
|
+
exports.createWaitForTimeTool = createWaitForTimeTool;
|
|
8
|
+
exports.createWaitForSelectorTool = createWaitForSelectorTool;
|
|
9
|
+
exports.createWaitForURLTool = createWaitForURLTool;
|
|
10
|
+
const tools_1 = require("@langchain/core/tools");
|
|
11
|
+
/**
|
|
12
|
+
* 创建等待时间工具
|
|
13
|
+
*/
|
|
14
|
+
function createWaitForTimeTool(page) {
|
|
15
|
+
return new tools_1.DynamicTool({
|
|
16
|
+
name: 'browser_wait_for_time',
|
|
17
|
+
description: 'Wait for a specified amount of time. Input should be the time in milliseconds as a number.',
|
|
18
|
+
func: async (input) => {
|
|
19
|
+
try {
|
|
20
|
+
const time = parseInt(input, 10);
|
|
21
|
+
if (isNaN(time)) {
|
|
22
|
+
throw new Error('Input must be a number representing milliseconds');
|
|
23
|
+
}
|
|
24
|
+
await page.waitForTimeout(time);
|
|
25
|
+
return `Waited for ${time}ms`;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new Error(`Failed to wait: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 创建等待元素工具
|
|
35
|
+
*/
|
|
36
|
+
function createWaitForSelectorTool(page) {
|
|
37
|
+
return new tools_1.DynamicTool({
|
|
38
|
+
name: 'browser_wait_for_selector',
|
|
39
|
+
description: 'Wait for an element to appear. Input should be a CSS selector or text that identifies the element. You can optionally specify timeout in milliseconds like: "selector, timeout=5000".',
|
|
40
|
+
func: async (input) => {
|
|
41
|
+
try {
|
|
42
|
+
// 解析输入(支持可选的 timeout 参数)
|
|
43
|
+
let selector = input;
|
|
44
|
+
let timeout = 30000;
|
|
45
|
+
const timeoutMatch = input.match(/timeout=(\d+)/);
|
|
46
|
+
if (timeoutMatch) {
|
|
47
|
+
timeout = parseInt(timeoutMatch[1], 10);
|
|
48
|
+
selector = input.replace(/,?\s*timeout=\d+/, '').trim();
|
|
49
|
+
}
|
|
50
|
+
// 尝试多个选择器
|
|
51
|
+
const selectors = selector.split(',').map(s => s.trim());
|
|
52
|
+
for (const sel of selectors) {
|
|
53
|
+
try {
|
|
54
|
+
// 先尝试作为文本选择器
|
|
55
|
+
const locator = page.getByText(sel);
|
|
56
|
+
const count = await locator.count();
|
|
57
|
+
if (count > 0) {
|
|
58
|
+
await locator.waitFor({ state: 'visible', timeout });
|
|
59
|
+
return `Element with text "${sel}" became visible`;
|
|
60
|
+
}
|
|
61
|
+
// 再尝试作为 CSS 选择器
|
|
62
|
+
await page.waitForSelector(sel, { state: 'visible', timeout });
|
|
63
|
+
return `Element "${sel}" became visible`;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`No element found matching: ${selector}`);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new Error(`Failed to wait for selector: ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 创建等待URL工具
|
|
79
|
+
*/
|
|
80
|
+
function createWaitForURLTool(page) {
|
|
81
|
+
return new tools_1.DynamicTool({
|
|
82
|
+
name: 'browser_wait_for_url',
|
|
83
|
+
description: 'Wait for the URL to match a pattern. Input should be a URL pattern (string, glob, or regex).',
|
|
84
|
+
func: async (input) => {
|
|
85
|
+
try {
|
|
86
|
+
await page.waitForURL(input, { timeout: 30000 });
|
|
87
|
+
return `URL matched: ${input}`;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw new Error(`Failed to wait for URL: ${error.message}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 等待工具集
|
|
97
|
+
*/
|
|
98
|
+
const waitTools = (page) => [
|
|
99
|
+
createWaitForTimeTool(page),
|
|
100
|
+
createWaitForSelectorTool(page),
|
|
101
|
+
createWaitForURLTool(page),
|
|
102
|
+
];
|
|
103
|
+
exports.waitTools = waitTools;
|
|
104
|
+
//# sourceMappingURL=wait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/agents/tools/wait.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自愈 Agent 类型定义
|
|
3
|
+
*/
|
|
4
|
+
import type { ModelConfig } from '../types/external';
|
|
5
|
+
import type { ReActStep } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* 自愈 Agent 状态
|
|
8
|
+
*/
|
|
9
|
+
export interface HealAgentState {
|
|
10
|
+
objective: string;
|
|
11
|
+
error: string;
|
|
12
|
+
stackTrace?: string;
|
|
13
|
+
originalCode: string;
|
|
14
|
+
context: {
|
|
15
|
+
page: any;
|
|
16
|
+
context?: any;
|
|
17
|
+
};
|
|
18
|
+
variables?: Record<string, any>;
|
|
19
|
+
maxSteps?: number;
|
|
20
|
+
debugMode?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Agent 配置
|
|
24
|
+
*/
|
|
25
|
+
export interface HealAgentConfig {
|
|
26
|
+
model?: ModelConfig;
|
|
27
|
+
maxSteps?: number;
|
|
28
|
+
debugMode?: boolean;
|
|
29
|
+
setVariable?: (name: string, value: any) => void;
|
|
30
|
+
getAllVariables?: () => Record<string, any>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Agent 执行结果
|
|
34
|
+
*/
|
|
35
|
+
export interface HealAgentResult {
|
|
36
|
+
success: boolean;
|
|
37
|
+
reasoning?: string;
|
|
38
|
+
errorMessage?: string;
|
|
39
|
+
steps?: number;
|
|
40
|
+
updatedVariables?: Record<string, any>;
|
|
41
|
+
reactSteps?: ReActStep[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* MCP 工具定义
|
|
45
|
+
*/
|
|
46
|
+
export interface MCPTool {
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
inputSchema: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAM1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAE7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IAGrB,OAAO,EAAE;QACP,IAAI,EAAE,GAAG,CAAC;QACV,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAGF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGhC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7C;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B;AAMD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/agents/logger.ts"],"names":[],"mappings":"AACA,qBAAa,MAAM;IAEf,OAAO,CAAC,MAAM,CAAa;IAG3B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE;IAK7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE;IAK9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE;CAGlD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Logger = void 0;
|
|
4
|
+
class Logger {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.prefix = '[Agent]';
|
|
7
|
+
}
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
log(message, ...optionalParams) {
|
|
10
|
+
console.log(`${this.prefix} ${message}`, ...optionalParams);
|
|
11
|
+
}
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
+
warn(message, ...optionalParams) {
|
|
14
|
+
console.warn(`${this.prefix} ${message}`, ...optionalParams);
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
error(message, ...optionalParams) {
|
|
18
|
+
console.error(`${this.prefix} ${message}`, ...optionalParams);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.Logger = Logger;
|
|
22
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/agents/logger.ts"],"names":[],"mappings":";;;AACA,MAAa,MAAM;IAAnB;QAEY,WAAM,GAAG,SAAS,CAAC;IAgB/B,CAAC;IAdG,8DAA8D;IAC9D,GAAG,CAAC,OAAe,EAAE,GAAG,cAAqB;QACzC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,OAAe,EAAE,GAAG,cAAqB;QAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC;IACjE,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,OAAe,EAAE,GAAG,cAAqB;QAC3C,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC;IAClE,CAAC;CACJ;AAlBD,wBAkBC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright Executor - Uses LangChain's createAgent API to implement ReAct loop
|
|
3
|
+
*/
|
|
4
|
+
import type { HealContext } from '../types';
|
|
5
|
+
import { PlaywrightAgentState } from './types';
|
|
6
|
+
export declare class PlaywrightExecutor {
|
|
7
|
+
private state;
|
|
8
|
+
constructor(state: PlaywrightAgentState);
|
|
9
|
+
private createPlaywrightTools;
|
|
10
|
+
/**
|
|
11
|
+
* Update original script and save to database (heal mode)
|
|
12
|
+
*/
|
|
13
|
+
private updateOriginalScript;
|
|
14
|
+
execute(context: HealContext): Promise<void>;
|
|
15
|
+
private buildSystemPrompt;
|
|
16
|
+
private buildUserMessage;
|
|
17
|
+
/**
|
|
18
|
+
* Extract and normalize content from model response
|
|
19
|
+
* Handles string, array (ContentBlock[]), and other types
|
|
20
|
+
* Following LangChain.js best practices
|
|
21
|
+
*/
|
|
22
|
+
private extractContent;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=playwright-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-executor.d.ts","sourceRoot":"","sources":["../../../../src/agents/playwright-executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAuB;gBAExB,KAAK,EAAE,oBAAoB;YAIzB,qBAAqB;IAmFnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAKtB,OAAO,CAAC,OAAO,EAAE,WAAW;IA6ClC,OAAO,CAAC,iBAAiB;YAiBX,gBAAgB;IAyB9B;;;;SAIK;IACL,OAAO,CAAC,cAAc;CAwCvB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Playwright Executor - Uses LangChain's createAgent API to implement ReAct loop
|
|
4
|
+
*/
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.PlaywrightExecutor = void 0;
|
|
11
|
+
const langchain_1 = require("langchain");
|
|
12
|
+
const tools_1 = require("@langchain/core/tools");
|
|
13
|
+
const zod_1 = __importDefault(require("zod"));
|
|
14
|
+
class PlaywrightExecutor {
|
|
15
|
+
constructor(state) {
|
|
16
|
+
this.state = state;
|
|
17
|
+
}
|
|
18
|
+
async createPlaywrightTools(healContext) {
|
|
19
|
+
const standardTools = this.state.playwrightGroup.getDefaultTools();
|
|
20
|
+
const playwrightToolGroups = this.state.playwrightGroup.getNonDefaultGroupInfo();
|
|
21
|
+
const getToolGroupsTool = {
|
|
22
|
+
name: "get_tools",
|
|
23
|
+
description: "Get available tools in a group.",
|
|
24
|
+
schema: zod_1.default.object({
|
|
25
|
+
group_name: zod_1.default.string().describe("The name of the tool group."),
|
|
26
|
+
}),
|
|
27
|
+
func: async (param) => {
|
|
28
|
+
if (!param.group_name)
|
|
29
|
+
throw new Error('Missing group_name parameter');
|
|
30
|
+
return JSON.stringify(playwrightToolGroups[param.group_name]);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const callToolTool = {
|
|
34
|
+
name: "call_tool",
|
|
35
|
+
description: "Call a tool in a group by name.",
|
|
36
|
+
schema: zod_1.default.object({
|
|
37
|
+
group_name: zod_1.default.string().describe("Tool group name."),
|
|
38
|
+
tool_name: zod_1.default.string().describe("Tool name."),
|
|
39
|
+
args: zod_1.default.object().describe("Tool parameters."),
|
|
40
|
+
}),
|
|
41
|
+
func: async (param) => {
|
|
42
|
+
const { group_name, tool_name, args } = param;
|
|
43
|
+
if (!group_name || !tool_name)
|
|
44
|
+
throw new Error('Missing group_name or tool_name parameter');
|
|
45
|
+
return await this.state.playwrightGroup.callTool(tool_name, args);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
const finishTool = {
|
|
49
|
+
name: "finish_test",
|
|
50
|
+
description: "Call this tool ONLY when the step goal has been fully achieved or failed. After calling this, no more tools should be called.",
|
|
51
|
+
schema: zod_1.default.object({
|
|
52
|
+
isSuccess: zod_1.default.boolean().describe("Whether the step goal was successfully achieved."),
|
|
53
|
+
error: zod_1.default.string().optional().describe("Reason if the step goal fails to fully achieve, otherwise leave empty."),
|
|
54
|
+
variables: zod_1.default.object().describe(`
|
|
55
|
+
Key-value variables to assign in the test context.
|
|
56
|
+
- The variable names should be consistent with those in the original test script
|
|
57
|
+
- Avoid conflicts with existing variable names, unless the same variable is being updated
|
|
58
|
+
- Only include variables that have been changed or newly assigned in the fix
|
|
59
|
+
- The value should be NON-OBJECT types (string, number, boolean, etc.)
|
|
60
|
+
`),
|
|
61
|
+
repairedScript: zod_1.default.string().optional().describe(`
|
|
62
|
+
The complete fixed test script, leave empty if the step fails:
|
|
63
|
+
- Keep original runner.set, runner.get, runner.reuseTest calls for the steps fixed if possible and ensure no semantic changes
|
|
64
|
+
- MUST return The COMPLETE fixed test script
|
|
65
|
+
- ONLY apply fixes relevant to the current step and any necessary previous steps
|
|
66
|
+
- Do NOT wrap in closures or test body - write direct code using runner API
|
|
67
|
+
- Add a 'FIXED' comment for the step code being fixed
|
|
68
|
+
- Example:
|
|
69
|
+
\`\`\`typescript
|
|
70
|
+
// FIXED
|
|
71
|
+
await runner.runStep('Click button', async () => {
|
|
72
|
+
await page.click('#button');
|
|
73
|
+
});
|
|
74
|
+
\`\`\`
|
|
75
|
+
`),
|
|
76
|
+
}),
|
|
77
|
+
func: async (params) => {
|
|
78
|
+
healContext.success = params.isSuccess;
|
|
79
|
+
healContext.healError = params.error;
|
|
80
|
+
if (healContext.success) {
|
|
81
|
+
for (const [key, value] of Object.entries(params.variables)) {
|
|
82
|
+
this.state.variables.set(key, value);
|
|
83
|
+
}
|
|
84
|
+
this.state.originalScript = params.repairedScript;
|
|
85
|
+
this.updateOriginalScript(params.repairedScript);
|
|
86
|
+
}
|
|
87
|
+
return 'Test step finished.';
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
return [
|
|
91
|
+
...standardTools,
|
|
92
|
+
new tools_1.DynamicStructuredTool(getToolGroupsTool),
|
|
93
|
+
new tools_1.DynamicStructuredTool(callToolTool),
|
|
94
|
+
new tools_1.DynamicStructuredTool(finishTool)
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Update original script and save to database (heal mode)
|
|
99
|
+
*/
|
|
100
|
+
updateOriginalScript(script) {
|
|
101
|
+
this.state.storageService.saveTestScript(this.state.testCaseId, script);
|
|
102
|
+
this.state.logger.log('Script fixed');
|
|
103
|
+
}
|
|
104
|
+
async execute(context) {
|
|
105
|
+
const page = this.state.page;
|
|
106
|
+
if (!page)
|
|
107
|
+
throw new Error('Missing page object');
|
|
108
|
+
const tools = await this.createPlaywrightTools(context);
|
|
109
|
+
const agent = (0, langchain_1.createAgent)({
|
|
110
|
+
model: this.state.model,
|
|
111
|
+
tools: tools,
|
|
112
|
+
systemPrompt: this.buildSystemPrompt()
|
|
113
|
+
});
|
|
114
|
+
const inputStream = {
|
|
115
|
+
messages: [{
|
|
116
|
+
role: 'user',
|
|
117
|
+
content: await this.buildUserMessage(context)
|
|
118
|
+
}]
|
|
119
|
+
};
|
|
120
|
+
const stream = await agent.stream(inputStream, {
|
|
121
|
+
recursionLimit: 25,
|
|
122
|
+
streamMode: 'updates',
|
|
123
|
+
});
|
|
124
|
+
for await (const event of stream) {
|
|
125
|
+
// Process AI messages (thoughts and tool calls)
|
|
126
|
+
const messages = event.model_request?.messages || event.messages;
|
|
127
|
+
if (messages?.[0]?.type === 'ai') {
|
|
128
|
+
const aiMsg = messages[0];
|
|
129
|
+
const content = this.extractContent(aiMsg.content);
|
|
130
|
+
// Record thought
|
|
131
|
+
if (content) {
|
|
132
|
+
this.state.logger.log(`${content}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Process tool results
|
|
136
|
+
const toolMsg = event.tools?.messages?.[0];
|
|
137
|
+
if (toolMsg?.type === 'tool') {
|
|
138
|
+
const output = this.extractContent(toolMsg.content);
|
|
139
|
+
this.state.logger.log(`✅ Result [${toolMsg.name}]:`, output.length > 300 ? output.substring(0, 100) + '...' : output);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
buildSystemPrompt() {
|
|
144
|
+
return `
|
|
145
|
+
You are a Playwright test expert, skilled at analyzing and fixing errors in browser automation tests.
|
|
146
|
+
|
|
147
|
+
## ** Critial Rules **
|
|
148
|
+
- You MUST run the step using tools first before fixing the script
|
|
149
|
+
- When you step finishes or fails, you MUST call 'finish_test' tool and set the 'isSuccess' parameter correctly.
|
|
150
|
+
- Use tools squentially
|
|
151
|
+
- Analyze the current step code, errors and page context and what variables are being set
|
|
152
|
+
- Make sure the fixed code is concise and consistent with the original code in logic and style
|
|
153
|
+
|
|
154
|
+
## ** Constraints **
|
|
155
|
+
- NEVER set 'isSuccess' to true if the step goal is not fully achieved
|
|
156
|
+
- Fail the step fast and DON'T do unnecessary or unreansonable retries
|
|
157
|
+
`.trim();
|
|
158
|
+
}
|
|
159
|
+
async buildUserMessage(context) {
|
|
160
|
+
const variableList = Object.keys(this.state.variables).length > 0
|
|
161
|
+
? Object.keys(this.state.variables).map(v => ` - ${v}: ${JSON.stringify(this.state.variables.get(v))}`).join('\n')
|
|
162
|
+
: undefined;
|
|
163
|
+
const snapshot = await this.state.adapter.callTool('browser_snapshot', {});
|
|
164
|
+
const pageState = snapshot.isError ? '' : this.extractContent(snapshot);
|
|
165
|
+
return `
|
|
166
|
+
## Step Description: ${context.stepDescription}
|
|
167
|
+
|
|
168
|
+
${variableList ? `## Variables in Context\n${variableList}` : ''}
|
|
169
|
+
|
|
170
|
+
## Stacktrace
|
|
171
|
+
${context.stackTrace}
|
|
172
|
+
|
|
173
|
+
## Full Test Script
|
|
174
|
+
\`\`\`typescript
|
|
175
|
+
${this.state.originalScript}
|
|
176
|
+
\`\`\`
|
|
177
|
+
|
|
178
|
+
${pageState}
|
|
179
|
+
}
|
|
180
|
+
`.trim();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Extract and normalize content from model response
|
|
184
|
+
* Handles string, array (ContentBlock[]), and other types
|
|
185
|
+
* Following LangChain.js best practices
|
|
186
|
+
*/
|
|
187
|
+
extractContent(content) {
|
|
188
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
189
|
+
const asAny = content;
|
|
190
|
+
if (asAny.content) {
|
|
191
|
+
content = asAny.content;
|
|
192
|
+
}
|
|
193
|
+
// If string, return as-is
|
|
194
|
+
if (typeof content === 'string') {
|
|
195
|
+
return content;
|
|
196
|
+
}
|
|
197
|
+
// If array (ContentBlock[]), extract text content
|
|
198
|
+
if (Array.isArray(content)) {
|
|
199
|
+
const content0 = content[0];
|
|
200
|
+
if (typeof content0 === 'string') {
|
|
201
|
+
return content0;
|
|
202
|
+
}
|
|
203
|
+
if (typeof content0 === 'object' && content0 !== null) {
|
|
204
|
+
// Handle text blocks
|
|
205
|
+
if ('text' in content0) {
|
|
206
|
+
return content0.text;
|
|
207
|
+
}
|
|
208
|
+
// Handle other block types by converting to string
|
|
209
|
+
return JSON.stringify(content0);
|
|
210
|
+
}
|
|
211
|
+
return String(content0);
|
|
212
|
+
}
|
|
213
|
+
// If object, try to extract text field or convert to string
|
|
214
|
+
if (typeof content === 'object' && content !== null) {
|
|
215
|
+
``;
|
|
216
|
+
if ('text' in content) {
|
|
217
|
+
return content;
|
|
218
|
+
}
|
|
219
|
+
return content;
|
|
220
|
+
}
|
|
221
|
+
// Fallback: convert to string
|
|
222
|
+
return String(content);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.PlaywrightExecutor = PlaywrightExecutor;
|
|
226
|
+
//# sourceMappingURL=playwright-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-executor.js","sourceRoot":"","sources":["../../../../src/agents/playwright-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright Backend 工具适配器 - 新方案
|
|
3
|
+
*
|
|
4
|
+
* 基于 BrowserServerBackend 的伪实例实现
|
|
5
|
+
* 参考:playwright/lib/mcp/test/browserBackend.js
|
|
6
|
+
*
|
|
7
|
+
* 这个方案的优势:
|
|
8
|
+
* 1. 直接使用 Playwright 官方的 BrowserServerBackend 类
|
|
9
|
+
* 2. 直接导入官方的 identityFactory,完全复用
|
|
10
|
+
* 3. 获得完整的官方工具功能,包括 Response、Context 等
|
|
11
|
+
* 4. 无需手动适配 Context 和 Response
|
|
12
|
+
* 5. 自动跟随 Playwright 更新
|
|
13
|
+
*/
|
|
14
|
+
import { DynamicStructuredTool } from '@langchain/core/tools';
|
|
15
|
+
import type { BrowserContext } from 'playwright';
|
|
16
|
+
export declare class PlaywrightBackendAdapter {
|
|
17
|
+
private backend;
|
|
18
|
+
private tools;
|
|
19
|
+
static create(browserContext: BrowserContext): Promise<PlaywrightBackendAdapter>;
|
|
20
|
+
getTools(): DynamicStructuredTool[];
|
|
21
|
+
callTool(name: string, params: any): Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* 官方的 identityFactory 函数
|
|
24
|
+
* 参考:playwright/lib/mcp/test/browserBackend.js 第 94-104 行
|
|
25
|
+
*
|
|
26
|
+
* 注意:官方文件中定义了这个函数但没有导出,所以我们在这里复制一份
|
|
27
|
+
*/
|
|
28
|
+
private identityFactory;
|
|
29
|
+
private loadPlaywrightMCPModules;
|
|
30
|
+
private getBackend;
|
|
31
|
+
private getPlaywrightBackendToolsFromContext;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=playwright-backend-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-backend-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/agents/tools/playwright-backend-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,qBAAa,wBAAwB;IAEnC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,KAAK,CAA+B;WAE/B,MAAM,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAOtF,QAAQ,IAAI,qBAAqB,EAAE;IAK7B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG;IAQxC;;;;;OAKG;IAEH,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,wBAAwB;YAelB,UAAU;YA2BV,oCAAoC;CAsBnD"}
|