@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.
Files changed (214) hide show
  1. package/README.md +263 -0
  2. package/dist/agents/heal-agent.d.ts +30 -0
  3. package/dist/agents/heal-agent.d.ts.map +1 -0
  4. package/dist/agents/heal-agent.js +76 -0
  5. package/dist/agents/heal-agent.js.map +1 -0
  6. package/dist/agents/healer.d.ts +73 -0
  7. package/dist/agents/healer.d.ts.map +1 -0
  8. package/dist/agents/healer.js +538 -0
  9. package/dist/agents/healer.js.map +1 -0
  10. package/dist/agents/tools/form.d.ts +22 -0
  11. package/dist/agents/tools/form.d.ts.map +1 -0
  12. package/dist/agents/tools/form.js +134 -0
  13. package/dist/agents/tools/form.js.map +1 -0
  14. package/dist/agents/tools/index.d.ts +13 -0
  15. package/dist/agents/tools/index.d.ts.map +1 -0
  16. package/dist/agents/tools/index.js +33 -0
  17. package/dist/agents/tools/index.js.map +1 -0
  18. package/dist/agents/tools/navigate.d.ts +22 -0
  19. package/dist/agents/tools/navigate.d.ts.map +1 -0
  20. package/dist/agents/tools/navigate.js +74 -0
  21. package/dist/agents/tools/navigate.js.map +1 -0
  22. package/dist/agents/tools/snapshot.d.ts +22 -0
  23. package/dist/agents/tools/snapshot.d.ts.map +1 -0
  24. package/dist/agents/tools/snapshot.js +110 -0
  25. package/dist/agents/tools/snapshot.js.map +1 -0
  26. package/dist/agents/tools/verify.d.ts +34 -0
  27. package/dist/agents/tools/verify.d.ts.map +1 -0
  28. package/dist/agents/tools/verify.js +169 -0
  29. package/dist/agents/tools/verify.js.map +1 -0
  30. package/dist/agents/tools/wait.d.ts +22 -0
  31. package/dist/agents/tools/wait.d.ts.map +1 -0
  32. package/dist/agents/tools/wait.js +104 -0
  33. package/dist/agents/tools/wait.js.map +1 -0
  34. package/dist/agents/types.d.ts +51 -0
  35. package/dist/agents/types.d.ts.map +1 -0
  36. package/dist/agents/types.js +6 -0
  37. package/dist/agents/types.js.map +1 -0
  38. package/dist/ai-runner/src/agents/logger.d.ts +7 -0
  39. package/dist/ai-runner/src/agents/logger.d.ts.map +1 -0
  40. package/dist/ai-runner/src/agents/logger.js +22 -0
  41. package/dist/ai-runner/src/agents/logger.js.map +1 -0
  42. package/dist/ai-runner/src/agents/playwright-executor.d.ts +24 -0
  43. package/dist/ai-runner/src/agents/playwright-executor.d.ts.map +1 -0
  44. package/dist/ai-runner/src/agents/playwright-executor.js +226 -0
  45. package/dist/ai-runner/src/agents/playwright-executor.js.map +1 -0
  46. package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.d.ts +33 -0
  47. package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.d.ts.map +1 -0
  48. package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.js +146 -0
  49. package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.js.map +1 -0
  50. package/dist/ai-runner/src/agents/types.d.ts +55 -0
  51. package/dist/ai-runner/src/agents/types.d.ts.map +1 -0
  52. package/dist/ai-runner/src/agents/types.js +6 -0
  53. package/dist/ai-runner/src/agents/types.js.map +1 -0
  54. package/dist/ai-runner/src/examples/test-final.d.ts +6 -0
  55. package/dist/ai-runner/src/examples/test-final.d.ts.map +1 -0
  56. package/dist/ai-runner/src/examples/test-final.js +73 -0
  57. package/dist/ai-runner/src/examples/test-final.js.map +1 -0
  58. package/dist/ai-runner/src/examples/test-simple-tools.d.ts +6 -0
  59. package/dist/ai-runner/src/examples/test-simple-tools.d.ts.map +1 -0
  60. package/dist/ai-runner/src/examples/test-simple-tools.js +149 -0
  61. package/dist/ai-runner/src/examples/test-simple-tools.js.map +1 -0
  62. package/dist/ai-runner/src/examples/test-working.d.ts +5 -0
  63. package/dist/ai-runner/src/examples/test-working.d.ts.map +1 -0
  64. package/dist/ai-runner/src/examples/test-working.js +43 -0
  65. package/dist/ai-runner/src/examples/test-working.js.map +1 -0
  66. package/dist/ai-runner/src/examples/v-test-backend-adapter.d.ts +15 -0
  67. package/dist/ai-runner/src/examples/v-test-backend-adapter.d.ts.map +1 -0
  68. package/dist/ai-runner/src/examples/v-test-backend-adapter.js +240 -0
  69. package/dist/ai-runner/src/examples/v-test-backend-adapter.js.map +1 -0
  70. package/dist/ai-runner/src/index.d.ts +8 -0
  71. package/dist/ai-runner/src/index.d.ts.map +1 -0
  72. package/dist/ai-runner/src/index.js +11 -0
  73. package/dist/ai-runner/src/index.js.map +1 -0
  74. package/dist/ai-runner/src/runner.d.ts +28 -0
  75. package/dist/ai-runner/src/runner.d.ts.map +1 -0
  76. package/dist/ai-runner/src/runner.js +176 -0
  77. package/dist/ai-runner/src/runner.js.map +1 -0
  78. package/dist/ai-runner/src/tools/index.d.ts +16 -0
  79. package/dist/ai-runner/src/tools/index.d.ts.map +1 -0
  80. package/dist/ai-runner/src/tools/index.js +35 -0
  81. package/dist/ai-runner/src/tools/index.js.map +1 -0
  82. package/dist/ai-runner/src/tools/playwright-groups.d.ts +19 -0
  83. package/dist/ai-runner/src/tools/playwright-groups.d.ts.map +1 -0
  84. package/dist/ai-runner/src/tools/playwright-groups.js +42 -0
  85. package/dist/ai-runner/src/tools/playwright-groups.js.map +1 -0
  86. package/dist/ai-runner/src/types/external.d.ts +6 -0
  87. package/dist/ai-runner/src/types/external.d.ts.map +1 -0
  88. package/dist/ai-runner/src/types/external.js +7 -0
  89. package/dist/ai-runner/src/types/external.js.map +1 -0
  90. package/dist/ai-runner/src/types/index.d.ts +95 -0
  91. package/dist/ai-runner/src/types/index.d.ts.map +1 -0
  92. package/dist/ai-runner/src/types/index.js +7 -0
  93. package/dist/ai-runner/src/types/index.js.map +1 -0
  94. package/dist/core/runner.d.ts +194 -0
  95. package/dist/core/runner.d.ts.map +1 -0
  96. package/dist/core/runner.js +650 -0
  97. package/dist/core/runner.js.map +1 -0
  98. package/dist/core-infra/src/directory-validator.d.ts +29 -0
  99. package/dist/core-infra/src/directory-validator.d.ts.map +1 -0
  100. package/dist/core-infra/src/directory-validator.js +91 -0
  101. package/dist/core-infra/src/directory-validator.js.map +1 -0
  102. package/dist/core-infra/src/index.d.ts +14 -0
  103. package/dist/core-infra/src/index.d.ts.map +1 -0
  104. package/dist/core-infra/src/index.js +44 -0
  105. package/dist/core-infra/src/index.js.map +1 -0
  106. package/dist/core-infra/src/mcp/file-mcp-manager.d.ts +14 -0
  107. package/dist/core-infra/src/mcp/file-mcp-manager.d.ts.map +1 -0
  108. package/dist/core-infra/src/mcp/file-mcp-manager.js +46 -0
  109. package/dist/core-infra/src/mcp/file-mcp-manager.js.map +1 -0
  110. package/dist/core-infra/src/mcp/index.d.ts +21 -0
  111. package/dist/core-infra/src/mcp/index.d.ts.map +1 -0
  112. package/dist/core-infra/src/mcp/index.js +17 -0
  113. package/dist/core-infra/src/mcp/index.js.map +1 -0
  114. package/dist/core-infra/src/mcp/mcp-client.d.ts +128 -0
  115. package/dist/core-infra/src/mcp/mcp-client.d.ts.map +1 -0
  116. package/dist/core-infra/src/mcp/mcp-client.js +163 -0
  117. package/dist/core-infra/src/mcp/mcp-client.js.map +1 -0
  118. package/dist/core-infra/src/mcp/mcp-manager.d.ts +21 -0
  119. package/dist/core-infra/src/mcp/mcp-manager.d.ts.map +1 -0
  120. package/dist/core-infra/src/mcp/mcp-manager.js +99 -0
  121. package/dist/core-infra/src/mcp/mcp-manager.js.map +1 -0
  122. package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts +19 -0
  123. package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts.map +1 -0
  124. package/dist/core-infra/src/mcp/playwright-mcp-manager.js +120 -0
  125. package/dist/core-infra/src/mcp/playwright-mcp-manager.js.map +1 -0
  126. package/dist/core-infra/src/model.d.ts +11 -0
  127. package/dist/core-infra/src/model.d.ts.map +1 -0
  128. package/dist/core-infra/src/model.js +190 -0
  129. package/dist/core-infra/src/model.js.map +1 -0
  130. package/dist/core-infra/src/repositories/BaseRepository.d.ts +69 -0
  131. package/dist/core-infra/src/repositories/BaseRepository.d.ts.map +1 -0
  132. package/dist/core-infra/src/repositories/BaseRepository.js +213 -0
  133. package/dist/core-infra/src/repositories/BaseRepository.js.map +1 -0
  134. package/dist/core-infra/src/repositories/DirectoryRepository.d.ts +70 -0
  135. package/dist/core-infra/src/repositories/DirectoryRepository.d.ts.map +1 -0
  136. package/dist/core-infra/src/repositories/DirectoryRepository.js +336 -0
  137. package/dist/core-infra/src/repositories/DirectoryRepository.js.map +1 -0
  138. package/dist/core-infra/src/repositories/ExplorationRepository.d.ts +34 -0
  139. package/dist/core-infra/src/repositories/ExplorationRepository.d.ts.map +1 -0
  140. package/dist/core-infra/src/repositories/ExplorationRepository.js +54 -0
  141. package/dist/core-infra/src/repositories/ExplorationRepository.js.map +1 -0
  142. package/dist/core-infra/src/repositories/FileRepository.d.ts +56 -0
  143. package/dist/core-infra/src/repositories/FileRepository.d.ts.map +1 -0
  144. package/dist/core-infra/src/repositories/FileRepository.js +132 -0
  145. package/dist/core-infra/src/repositories/FileRepository.js.map +1 -0
  146. package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts +38 -0
  147. package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts.map +1 -0
  148. package/dist/core-infra/src/repositories/ModelConfigRepository.js +59 -0
  149. package/dist/core-infra/src/repositories/ModelConfigRepository.js.map +1 -0
  150. package/dist/core-infra/src/repositories/ProjectRepository.d.ts +32 -0
  151. package/dist/core-infra/src/repositories/ProjectRepository.d.ts.map +1 -0
  152. package/dist/core-infra/src/repositories/ProjectRepository.js +67 -0
  153. package/dist/core-infra/src/repositories/ProjectRepository.js.map +1 -0
  154. package/dist/core-infra/src/repositories/SettingsRepository.d.ts +19 -0
  155. package/dist/core-infra/src/repositories/SettingsRepository.d.ts.map +1 -0
  156. package/dist/core-infra/src/repositories/SettingsRepository.js +72 -0
  157. package/dist/core-infra/src/repositories/SettingsRepository.js.map +1 -0
  158. package/dist/core-infra/src/repositories/TableDataRepository.d.ts +22 -0
  159. package/dist/core-infra/src/repositories/TableDataRepository.d.ts.map +1 -0
  160. package/dist/core-infra/src/repositories/TableDataRepository.js +33 -0
  161. package/dist/core-infra/src/repositories/TableDataRepository.js.map +1 -0
  162. package/dist/core-infra/src/repositories/TestCaseRepository.d.ts +120 -0
  163. package/dist/core-infra/src/repositories/TestCaseRepository.d.ts.map +1 -0
  164. package/dist/core-infra/src/repositories/TestCaseRepository.js +463 -0
  165. package/dist/core-infra/src/repositories/TestCaseRepository.js.map +1 -0
  166. package/dist/core-infra/src/repositories/TestPlanRepository.d.ts +35 -0
  167. package/dist/core-infra/src/repositories/TestPlanRepository.d.ts.map +1 -0
  168. package/dist/core-infra/src/repositories/TestPlanRepository.js +80 -0
  169. package/dist/core-infra/src/repositories/TestPlanRepository.js.map +1 -0
  170. package/dist/core-infra/src/repositories/TestResultRepository.d.ts +30 -0
  171. package/dist/core-infra/src/repositories/TestResultRepository.d.ts.map +1 -0
  172. package/dist/core-infra/src/repositories/TestResultRepository.js +54 -0
  173. package/dist/core-infra/src/repositories/TestResultRepository.js.map +1 -0
  174. package/dist/core-infra/src/repositories/index.d.ts +17 -0
  175. package/dist/core-infra/src/repositories/index.d.ts.map +1 -0
  176. package/dist/core-infra/src/repositories/index.js +31 -0
  177. package/dist/core-infra/src/repositories/index.js.map +1 -0
  178. package/dist/core-infra/src/storageService.d.ts +131 -0
  179. package/dist/core-infra/src/storageService.d.ts.map +1 -0
  180. package/dist/core-infra/src/storageService.js +304 -0
  181. package/dist/core-infra/src/storageService.js.map +1 -0
  182. package/dist/core-infra/src/types.d.ts +218 -0
  183. package/dist/core-infra/src/types.d.ts.map +1 -0
  184. package/dist/core-infra/src/types.js +3 -0
  185. package/dist/core-infra/src/types.js.map +1 -0
  186. package/dist/index.d.ts +8 -0
  187. package/dist/index.d.ts.map +1 -0
  188. package/dist/index.js +11 -0
  189. package/dist/index.js.map +1 -0
  190. package/dist/types/external.d.ts +6 -0
  191. package/dist/types/external.d.ts.map +1 -0
  192. package/dist/types/external.js +7 -0
  193. package/dist/types/external.js.map +1 -0
  194. package/dist/types/index.d.ts +153 -0
  195. package/dist/types/index.d.ts.map +1 -0
  196. package/dist/types/index.js +26 -0
  197. package/dist/types/index.js.map +1 -0
  198. package/docs/PLAYWRIGHT_MCP_ADAPTER.md +132 -0
  199. package/docs/SCHEMA_EXTRACTION.md +224 -0
  200. package/package.json +43 -0
  201. package/playwright.config.ts +38 -0
  202. package/src/agents/logger.ts +20 -0
  203. package/src/agents/playwright-executor.ts +244 -0
  204. package/src/agents/tools/playwright-backend-adapter.ts +134 -0
  205. package/src/agents/tools/playwright-mcp-types.d.ts +71 -0
  206. package/src/agents/types.ts +80 -0
  207. package/src/index.ts +27 -0
  208. package/src/runner.ts +219 -0
  209. package/src/tools/index.ts +48 -0
  210. package/src/tools/playwright-groups.ts +54 -0
  211. package/src/types/external.ts +7 -0
  212. package/src/types/index.ts +118 -0
  213. package/tests/agent/test-heal-agent.spec.ts +69 -0
  214. package/tsconfig.json +26 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Playwright Backend 工具适配器 - 新方案
4
+ *
5
+ * 基于 BrowserServerBackend 的伪实例实现
6
+ * 参考:playwright/lib/mcp/test/browserBackend.js
7
+ *
8
+ * 这个方案的优势:
9
+ * 1. 直接使用 Playwright 官方的 BrowserServerBackend 类
10
+ * 2. 直接导入官方的 identityFactory,完全复用
11
+ * 3. 获得完整的官方工具功能,包括 Response、Context 等
12
+ * 4. 无需手动适配 Context 和 Response
13
+ * 5. 自动跟随 Playwright 更新
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.PlaywrightBackendAdapter = void 0;
50
+ const tools_1 = require("@langchain/core/tools");
51
+ const path = __importStar(require("path"));
52
+ class PlaywrightBackendAdapter {
53
+ constructor() {
54
+ this.tools = [];
55
+ }
56
+ static async create(browserContext) {
57
+ const adapter = new PlaywrightBackendAdapter();
58
+ adapter.backend = await adapter.getBackend(browserContext);
59
+ adapter.tools = await adapter.getPlaywrightBackendToolsFromContext();
60
+ return adapter;
61
+ }
62
+ getTools() {
63
+ return this.tools;
64
+ }
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
+ async callTool(name, params) {
67
+ return await this.backend.callTool(name, params);
68
+ }
69
+ // ============================================================================
70
+ // 动态加载 Playwright 官方模块
71
+ // ============================================================================
72
+ /**
73
+ * 官方的 identityFactory 函数
74
+ * 参考:playwright/lib/mcp/test/browserBackend.js 第 94-104 行
75
+ *
76
+ * 注意:官方文件中定义了这个函数但没有导出,所以我们在这里复制一份
77
+ */
78
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
+ identityFactory(browserContext) {
80
+ return {
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ createContext: async (clientInfo, abortSignal) => {
83
+ void clientInfo;
84
+ void abortSignal;
85
+ return {
86
+ browserContext,
87
+ close: async () => {
88
+ // 不关闭 context,因为它是外部的
89
+ }
90
+ };
91
+ }
92
+ };
93
+ }
94
+ loadPlaywrightMCPModules() {
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ const playwrightRoot = path.dirname(require.resolve('playwright'));
97
+ return {
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
+ BrowserServerBackend: require(path.join(playwrightRoot, 'lib', 'mcp', 'browser', 'browserServerBackend.js')).BrowserServerBackend,
100
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
+ defaultConfig: require(path.join(playwrightRoot, 'lib', 'mcp', 'browser', 'config.js')).defaultConfig,
102
+ // 使用本地定义的 identityFactory(因为官方没有导出)
103
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+ identityFactory: this.identityFactory,
105
+ };
106
+ }
107
+ async getBackend(browserContext) {
108
+ // 加载 Playwright 模块(包括官方的 identityFactory)
109
+ const { BrowserServerBackend, defaultConfig, identityFactory } = this.loadPlaywrightMCPModules();
110
+ // 使用官方的 identityFactory(参考 browserBackend.js 第 34 行)
111
+ const factory = identityFactory(browserContext);
112
+ // 创建 Backend 实例
113
+ const backend = new BrowserServerBackend({ ...defaultConfig, capabilities: ['core', 'core-tabs',] }, factory);
114
+ // 初始化 Backend
115
+ await backend.initialize({
116
+ name: 'ai-runner',
117
+ version: '1.0.0'
118
+ });
119
+ return backend;
120
+ }
121
+ // ============================================================================
122
+ // 工具转换函数
123
+ // ============================================================================
124
+ // export type ToolCapability = 'core' | 'core-tabs' | 'core-install' | 'vision' | 'pdf' | 'testing' | 'tracing';
125
+ async getPlaywrightBackendToolsFromContext() {
126
+ // 列出所有工具
127
+ const toolList = await this.backend.listTools();
128
+ // 转换为 LangChain 工具
129
+ const tools = [];
130
+ for (const mcpTool of toolList) {
131
+ const tool = new tools_1.DynamicStructuredTool({
132
+ name: mcpTool.name,
133
+ description: mcpTool.description,
134
+ schema: mcpTool.inputSchema,
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ func: async (input) => {
137
+ return await this.backend.callTool(mcpTool.name, input);
138
+ }
139
+ });
140
+ tools.push(tool);
141
+ }
142
+ return tools;
143
+ }
144
+ }
145
+ exports.PlaywrightBackendAdapter = PlaywrightBackendAdapter;
146
+ //# sourceMappingURL=playwright-backend-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-backend-adapter.js","sourceRoot":"","sources":["../../../../../src/agents/tools/playwright-backend-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Playwright Agent Type Definitions
3
+ */
4
+ import type { ModelConfig } from '../types/external';
5
+ import type { ReActStep } from '../types';
6
+ import { BrowserContext, Page } from '@playwright/test';
7
+ import { Logger } from './logger';
8
+ import { PlaywrightGroup } from '../tools/playwright-groups';
9
+ import { PlaywrightBackendAdapter } from './tools/playwright-backend-adapter';
10
+ import { StorageService } from '@cotestdev/core-infra';
11
+ import { BaseLanguageModel } from '@langchain/core/language_models/base';
12
+ /**
13
+ * Agent execution mode
14
+ */
15
+ export type AgentMode = 'heal' | 'execute';
16
+ /**
17
+ * Playwright Agent State
18
+ */
19
+ export interface PlaywrightAgentState {
20
+ logger: Logger;
21
+ /** Playwright Page object */
22
+ page: Page;
23
+ /** Playwright BrowserContext object */
24
+ context: BrowserContext;
25
+ variables: Map<string, any>;
26
+ model?: BaseLanguageModel;
27
+ originalScript: string;
28
+ playwrightGroup: PlaywrightGroup;
29
+ adapter: PlaywrightBackendAdapter;
30
+ storageService: StorageService;
31
+ testCaseId: string;
32
+ }
33
+ /**
34
+ * Playwright Agent Configuration
35
+ */
36
+ export interface PlaywrightAgentConfig {
37
+ /** Model configuration (for LLM Agent) */
38
+ model: ModelConfig;
39
+ }
40
+ /**
41
+ * Playwright Agent Execution Result
42
+ */
43
+ export interface PlaywrightAgentResult {
44
+ /** Whether the goal was successfully completed */
45
+ success: boolean;
46
+ /** Agent's reasoning process */
47
+ reasoning?: string;
48
+ /** If failed, the error reason */
49
+ errorMessage?: string;
50
+ /** How many steps were executed */
51
+ steps?: number;
52
+ /** Detailed step records of ReAct loop */
53
+ reactSteps?: ReActStep[];
54
+ }
55
+ //# 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;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAM3C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,uCAAuC;IACvC,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,wBAAwB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,KAAK,EAAE,WAAW,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IAEjB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Playwright Agent Type Definitions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/agents/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 最终版测试 - 测试 browser_backend_adapter 的核心能力
3
+ */
4
+ declare function testBackendAdapter(): Promise<void>;
5
+ export { testBackendAdapter };
6
+ //# sourceMappingURL=test-final.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-final.d.ts","sourceRoot":"","sources":["../../../../src/examples/test-final.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,iBAAe,kBAAkB,kBAoEhC;AAMD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * 最终版测试 - 测试 browser_backend_adapter 的核心能力
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.testBackendAdapter = testBackendAdapter;
7
+ const playwright_1 = require("playwright");
8
+ const playwright_backend_adapter_1 = require("../agents/tools/playwright-backend-adapter");
9
+ async function testBackendAdapter() {
10
+ console.log('\n========================================');
11
+ console.log('测试 Playwright Backend 工具能力');
12
+ console.log('========================================\n');
13
+ const browser = await playwright_1.chromium.launch({ headless: true });
14
+ const context = await browser.newContext();
15
+ try {
16
+ console.log('1. 加载工具');
17
+ const tools = await (0, playwright_backend_adapter_1.getPlaywrightBackendToolsFromContext)(context);
18
+ console.log(`✓ 成功加载 ${tools.length} 个工具\n`);
19
+ // 导航
20
+ const navigate = tools.find((t) => t.name === 'browser_navigate');
21
+ console.log('2. 测试导航');
22
+ await navigate.func({ url: 'https://example.com' });
23
+ console.log('✓ 导航成功\n');
24
+ // 快照
25
+ const snapshot = tools.find((t) => t.name === 'browser_snapshot');
26
+ console.log('3. 测试页面快照');
27
+ const snapResult = await snapshot.func({});
28
+ console.log('✓ 快照成功 (长度:', JSON.stringify(snapResult).length, ')\n');
29
+ // 执行 JS
30
+ const evaluate = tools.find((t) => t.name === 'browser_evaluate');
31
+ console.log('4. 测试 JavaScript 执行');
32
+ const evalResult = await evaluate.func({ expression: 'document.title' });
33
+ console.log('✓ 页面标题:', evalResult, '\n');
34
+ // 验证文本
35
+ const verify = tools.find((t) => t.name === 'browser_verify_text_visible');
36
+ console.log('5. 测试文本验证');
37
+ const verifyResult = await verify.func({ text: 'Example Domain' });
38
+ console.log('✓ 验证结果:', JSON.stringify(verifyResult).substring(0, 100), '...\n');
39
+ // 标签页
40
+ const tabs = tools.find((t) => t.name === 'browser_tabs');
41
+ console.log('6. 测试标签页管理');
42
+ const tabsResult = await tabs.func({ action: 'list' });
43
+ console.log('✓ 标签页结果:', typeof tabsResult === 'string' ? tabsResult.substring(0, 100) : JSON.stringify(tabsResult).substring(0, 100), '...\n');
44
+ // 等待
45
+ const wait = tools.find((t) => t.name === 'browser_wait_for');
46
+ console.log('7. 测试等待');
47
+ await wait.func({ time: 500 });
48
+ console.log('✓ 等待完成\n');
49
+ console.log('========================================');
50
+ console.log('✓ 所有测试通过!');
51
+ console.log('========================================');
52
+ console.log('\n成功测试的工具:');
53
+ console.log(' ✓ browser_navigate');
54
+ console.log(' ✓ browser_snapshot');
55
+ console.log(' ✓ browser_evaluate');
56
+ console.log(' ✓ browser_verify_text_visible');
57
+ console.log(' ✓ browser_tabs');
58
+ console.log(' ✓ browser_wait_for');
59
+ console.log('\nBackend 方案工作正常!\n');
60
+ }
61
+ catch (error) {
62
+ console.error('✗ 测试失败:', error);
63
+ throw error;
64
+ }
65
+ finally {
66
+ await context.close();
67
+ await browser.close();
68
+ }
69
+ }
70
+ if (require.main === module) {
71
+ testBackendAdapter().catch(console.error);
72
+ }
73
+ //# sourceMappingURL=test-final.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-final.js","sourceRoot":"","sources":["../../../../src/examples/test-final.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 简化版测试 - 测试核心工具能力
3
+ */
4
+ declare function testBackendAdapter(): Promise<void>;
5
+ export { testBackendAdapter };
6
+ //# sourceMappingURL=test-simple-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-simple-tools.d.ts","sourceRoot":"","sources":["../../../../src/examples/test-simple-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,iBAAe,kBAAkB,kBAmJhC;AAMD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * 简化版测试 - 测试核心工具能力
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.testBackendAdapter = testBackendAdapter;
7
+ const playwright_1 = require("playwright");
8
+ const playwright_backend_adapter_1 = require("../agents/tools/playwright-backend-adapter");
9
+ async function testBackendAdapter() {
10
+ console.log('\n========================================');
11
+ console.log('测试 Playwright Backend 核心工具能力');
12
+ console.log('========================================\n');
13
+ const browser = await playwright_1.chromium.launch({ headless: true });
14
+ const context = await browser.newContext();
15
+ try {
16
+ console.log('1. 创建 BrowserContext 并加载工具');
17
+ const tools = await (0, playwright_backend_adapter_1.getPlaywrightBackendToolsFromContext)(context);
18
+ console.log(`✓ 成功加载 ${tools.length} 个工具\n`);
19
+ // 导航到测试页面
20
+ const navigateTool = tools.find((t) => t.name === 'browser_navigate');
21
+ await navigateTool?.func({ url: 'https://www.google.com/' });
22
+ // 测试 1: browser_snapshot
23
+ console.log('========================================');
24
+ console.log('测试 1: 页面快照');
25
+ console.log('========================================');
26
+ const snapshotTool = tools.find((t) => t.name === 'browser_snapshot');
27
+ if (snapshotTool) {
28
+ const result = await snapshotTool.func({});
29
+ console.log('✓ 快照结果:', typeof result === 'string' ? result.substring(0, 300) : JSON.stringify(result).substring(0, 300), '...\n');
30
+ }
31
+ // 测试 2: browser_click
32
+ console.log('========================================');
33
+ console.log('测试 2: 点击元素');
34
+ console.log('========================================');
35
+ const clickTool = tools.find((t) => t.name === 'browser_click');
36
+ if (clickTool) {
37
+ try {
38
+ // browser_click 需要先获取页面快照中的元素引用
39
+ const snapResult = await snapshotTool?.func({});
40
+ // const snapData = typeof snapResult === 'string' ? JSON.parse(snapResult) : snapResult;
41
+ // 从快照中查找第一个链接的引用
42
+ const firstLinkRef = 'e31';
43
+ if (firstLinkRef) {
44
+ const result = await clickTool.func({
45
+ ref: firstLinkRef,
46
+ element: 'First link' // 可选字段
47
+ });
48
+ console.log('✓ 点击结果:', typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200), '...\n');
49
+ }
50
+ else {
51
+ console.log('✓ 未找到可点击的元素引用\n');
52
+ }
53
+ }
54
+ catch (err) {
55
+ console.log('✓ 点击出错(可能是正常的):', err.message.substring(0, 100), '\n');
56
+ }
57
+ }
58
+ // 测试 3: browser_evaluate
59
+ console.log('========================================');
60
+ console.log('测试 3: 执行 JavaScript');
61
+ console.log('========================================');
62
+ const evaluateTool = tools.find((t) => t.name === 'browser_evaluate');
63
+ if (evaluateTool) {
64
+ const result = await evaluateTool.func({
65
+ expression: 'document.title'
66
+ });
67
+ console.log('✓ 执行 JS 结果:', result, '\n');
68
+ }
69
+ // 测试 4: browser_verify_text_visible
70
+ console.log('========================================');
71
+ console.log('测试 4: 验证文本可见');
72
+ console.log('========================================');
73
+ const verifyTextTool = tools.find((t) => t.name === 'browser_verify_text_visible');
74
+ if (verifyTextTool) {
75
+ const result = await verifyTextTool.func({
76
+ text: 'More information',
77
+ state: 'visible'
78
+ });
79
+ console.log('✓ 验证文本结果:', typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200), '...\n');
80
+ }
81
+ // 测试 5: browser_tabs
82
+ console.log('========================================');
83
+ console.log('测试 5: 标签页管理');
84
+ console.log('========================================');
85
+ const tabsTool = tools.find((t) => t.name === 'browser_tabs');
86
+ if (tabsTool) {
87
+ const result = await tabsTool.func({ action: 'list' });
88
+ console.log('✓ 列出标签页:', typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200), '...\n');
89
+ }
90
+ // 测试 6: browser_take_screenshot
91
+ console.log('========================================');
92
+ console.log('测试 6: 截图');
93
+ console.log('========================================');
94
+ const screenshotTool = tools.find((t) => t.name === 'browser_take_screenshot');
95
+ if (screenshotTool) {
96
+ const result = await screenshotTool.func({});
97
+ console.log('✓ 截图完成:', typeof result === 'string' ? result.substring(0, 150) : JSON.stringify(result).substring(0, 150), '...\n');
98
+ }
99
+ // 测试 7: browser_type
100
+ console.log('========================================');
101
+ console.log('测试 7: 输入文本');
102
+ console.log('========================================');
103
+ const typeTool = tools.find((t) => t.name === 'browser_type');
104
+ if (typeTool) {
105
+ const result = await typeTool.func({
106
+ selector: 'h1',
107
+ text: 'Modified Text'
108
+ });
109
+ console.log('✓ 输入结果:', typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200), '...\n');
110
+ }
111
+ // 测试 8: browser_wait_for
112
+ console.log('========================================');
113
+ console.log('测试 8: 等待');
114
+ console.log('========================================');
115
+ const waitForTool = tools.find((t) => t.name === 'browser_wait_for');
116
+ if (waitForTool) {
117
+ const startTime = Date.now();
118
+ const result = await waitForTool.func({ time: 500 });
119
+ const duration = Date.now() - startTime;
120
+ console.log(`✓ 等待完成 (${duration}ms)\n`);
121
+ }
122
+ console.log('========================================');
123
+ console.log('✓ 所有核心工具测试完成!');
124
+ console.log('========================================');
125
+ console.log('\n测试总结:');
126
+ console.log(' ✓ browser_navigate - 导航');
127
+ console.log(' ✓ browser_snapshot - 页面快照');
128
+ console.log(' ✓ browser_click - 点击元素');
129
+ console.log(' ✓ browser_evaluate - 执行 JavaScript');
130
+ console.log(' ✓ browser_verify_text_visible - 验证文本');
131
+ console.log(' ✓ browser_tabs - 标签页管理');
132
+ console.log(' ✓ browser_take_screenshot - 截图');
133
+ console.log(' ✓ browser_type - 输入文本');
134
+ console.log(' ✓ browser_wait_for - 等待');
135
+ console.log('\n所有工具都能正常工作!\n');
136
+ }
137
+ catch (error) {
138
+ console.error('✗ 测试失败:', error);
139
+ throw error;
140
+ }
141
+ finally {
142
+ await context.close();
143
+ await browser.close();
144
+ }
145
+ }
146
+ if (require.main === module) {
147
+ testBackendAdapter().catch(console.error);
148
+ }
149
+ //# sourceMappingURL=test-simple-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-simple-tools.js","sourceRoot":"","sources":["../../../../src/examples/test-simple-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 简洁测试 - 验证工具能正常调用
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=test-working.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-working.d.ts","sourceRoot":"","sources":["../../../../src/examples/test-working.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * 简洁测试 - 验证工具能正常调用
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const playwright_1 = require("playwright");
7
+ const playwright_backend_adapter_1 = require("../agents/tools/playwright-backend-adapter");
8
+ async function testBackendAdapter() {
9
+ const browser = await playwright_1.chromium.launch({ headless: true });
10
+ const context = await browser.newContext();
11
+ try {
12
+ console.log('加载工具...');
13
+ const tools = await (0, playwright_backend_adapter_1.getPlaywrightBackendToolsFromContext)(context);
14
+ console.log(`成功加载 ${tools.length} 个工具`);
15
+ const navigate = tools.find((t) => t.name === 'browser_navigate');
16
+ await navigate.func({ url: 'https://example.com' });
17
+ console.log('✓ 导航');
18
+ const snapshot = tools.find((t) => t.name === 'browser_snapshot');
19
+ await snapshot.func({});
20
+ console.log('✓ 快照');
21
+ // 跳过 evaluate 测试(schema 有问题)
22
+ // const evaluate = tools.find((t: any) => t.name === 'browser_evaluate')!;
23
+ const verify = tools.find((t) => t.name === 'browser_verify_text_visible');
24
+ await verify.func({ text: 'Example' });
25
+ console.log('✓ 验证文本');
26
+ const tabs = tools.find((t) => t.name === 'browser_tabs');
27
+ await tabs.func({ action: 'list' });
28
+ console.log('✓ 标签页');
29
+ await tools.find((t) => t.name === 'browser_wait_for').func({ time: 500 });
30
+ console.log('✓ 等待');
31
+ console.log('\n所有测试通过!工具工作正常');
32
+ }
33
+ catch (error) {
34
+ console.error('测试失败:', error.message);
35
+ // 不重新抛出,以便查看完整的测试结果
36
+ }
37
+ finally {
38
+ await context.close();
39
+ await browser.close();
40
+ }
41
+ }
42
+ testBackendAdapter().catch(console.error);
43
+ //# sourceMappingURL=test-working.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-working.js","sourceRoot":"","sources":["../../../../src/examples/test-working.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,2CAA2D;AAC3D,2FAAkG;AAElG,KAAK,UAAU,kBAAkB;IAC/B,MAAM,OAAO,GAAG,MAAM,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAmB,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAE3D,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,IAAA,iEAAoC,EAAC,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAE,CAAC;QACxE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAE,CAAC;QACxE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,6BAA6B;QAC7B,2EAA2E;QAE3E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,6BAA6B,CAAE,CAAC;QACjF,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAE,CAAC;QAChE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAErB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,OAAO,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACjD,oBAAoB;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,kBAAkB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 全面测试 playwright-backend-adapter 的复杂工具能力
3
+ *
4
+ * 测试包括:
5
+ * - browser_run_code - 运行 Playwright 代码片段
6
+ * - browser_click - 点击元素
7
+ * - browser_drag - 拖拽
8
+ * - browser_take_screenshot - 截图
9
+ * - browser_snapshot - 页面快照
10
+ * - browser_fill_form - 填充表单
11
+ * - browser_tabs - 标签页管理
12
+ */
13
+ declare function testBackendAdapter(): Promise<void>;
14
+ export { testBackendAdapter };
15
+ //# sourceMappingURL=v-test-backend-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v-test-backend-adapter.d.ts","sourceRoot":"","sources":["../../../../src/examples/v-test-backend-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,iBAAe,kBAAkB,kBA8MhC;AAOD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}