@pyrokine/mcp-chrome 1.0.0 → 1.3.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.
Files changed (115) hide show
  1. package/README.md +236 -96
  2. package/dist/anti-detection/behavior.d.ts +0 -8
  3. package/dist/anti-detection/behavior.d.ts.map +1 -1
  4. package/dist/anti-detection/behavior.js +0 -16
  5. package/dist/anti-detection/behavior.js.map +1 -1
  6. package/dist/cdp/client.d.ts +10 -2
  7. package/dist/cdp/client.d.ts.map +1 -1
  8. package/dist/cdp/client.js +76 -61
  9. package/dist/cdp/client.js.map +1 -1
  10. package/dist/cdp/launcher.d.ts +1 -8
  11. package/dist/cdp/launcher.d.ts.map +1 -1
  12. package/dist/cdp/launcher.js +18 -24
  13. package/dist/cdp/launcher.js.map +1 -1
  14. package/dist/core/auto-wait.d.ts +8 -1
  15. package/dist/core/auto-wait.d.ts.map +1 -1
  16. package/dist/core/auto-wait.js +15 -5
  17. package/dist/core/auto-wait.js.map +1 -1
  18. package/dist/core/errors.d.ts +11 -13
  19. package/dist/core/errors.d.ts.map +1 -1
  20. package/dist/core/errors.js +50 -31
  21. package/dist/core/errors.js.map +1 -1
  22. package/dist/core/index.d.ts +1 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +1 -0
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/locator.d.ts +17 -6
  27. package/dist/core/locator.d.ts.map +1 -1
  28. package/dist/core/locator.js +137 -28
  29. package/dist/core/locator.js.map +1 -1
  30. package/dist/core/retry.d.ts.map +1 -1
  31. package/dist/core/retry.js +1 -1
  32. package/dist/core/retry.js.map +1 -1
  33. package/dist/core/session.d.ts +71 -16
  34. package/dist/core/session.d.ts.map +1 -1
  35. package/dist/core/session.js +365 -124
  36. package/dist/core/session.js.map +1 -1
  37. package/dist/core/types.d.ts +15 -0
  38. package/dist/core/types.d.ts.map +1 -1
  39. package/dist/core/types.js +11 -2
  40. package/dist/core/types.js.map +1 -1
  41. package/dist/core/unified-session.d.ts +418 -0
  42. package/dist/core/unified-session.d.ts.map +1 -0
  43. package/dist/core/unified-session.js +1044 -0
  44. package/dist/core/unified-session.js.map +1 -0
  45. package/dist/extension/bridge.d.ts +203 -0
  46. package/dist/extension/bridge.d.ts.map +1 -0
  47. package/dist/extension/bridge.js +375 -0
  48. package/dist/extension/bridge.js.map +1 -0
  49. package/dist/extension/http-server.d.ts +60 -0
  50. package/dist/extension/http-server.d.ts.map +1 -0
  51. package/dist/extension/http-server.js +319 -0
  52. package/dist/extension/http-server.js.map +1 -0
  53. package/dist/extension/index.d.ts +7 -0
  54. package/dist/extension/index.d.ts.map +1 -0
  55. package/dist/extension/index.js +6 -0
  56. package/dist/extension/index.js.map +1 -0
  57. package/dist/extension/native-host-installer.d.ts +21 -0
  58. package/dist/extension/native-host-installer.d.ts.map +1 -0
  59. package/dist/extension/native-host-installer.js +147 -0
  60. package/dist/extension/native-host-installer.js.map +1 -0
  61. package/dist/extension/socket-server.d.ts +32 -0
  62. package/dist/extension/socket-server.d.ts.map +1 -0
  63. package/dist/extension/socket-server.js +177 -0
  64. package/dist/extension/socket-server.js.map +1 -0
  65. package/dist/extension/ws-server.d.ts +40 -0
  66. package/dist/extension/ws-server.d.ts.map +1 -0
  67. package/dist/extension/ws-server.js +246 -0
  68. package/dist/extension/ws-server.js.map +1 -0
  69. package/dist/index.js +16 -67
  70. package/dist/index.js.map +1 -1
  71. package/dist/native-host/index.js +280 -0
  72. package/dist/native-host/mcp-chrome-host +2 -0
  73. package/dist/tools/browse.d.ts +3 -76
  74. package/dist/tools/browse.d.ts.map +1 -1
  75. package/dist/tools/browse.js +193 -237
  76. package/dist/tools/browse.js.map +1 -1
  77. package/dist/tools/cookies.d.ts +6 -66
  78. package/dist/tools/cookies.d.ts.map +1 -1
  79. package/dist/tools/cookies.js +129 -125
  80. package/dist/tools/cookies.js.map +1 -1
  81. package/dist/tools/evaluate.d.ts +3 -37
  82. package/dist/tools/evaluate.d.ts.map +1 -1
  83. package/dist/tools/evaluate.js +68 -55
  84. package/dist/tools/evaluate.js.map +1 -1
  85. package/dist/tools/extract.d.ts +3 -200
  86. package/dist/tools/extract.d.ts.map +1 -1
  87. package/dist/tools/extract.js +287 -238
  88. package/dist/tools/extract.js.map +1 -1
  89. package/dist/tools/index.d.ts +9 -9
  90. package/dist/tools/index.d.ts.map +1 -1
  91. package/dist/tools/index.js +9 -9
  92. package/dist/tools/index.js.map +1 -1
  93. package/dist/tools/input.d.ts +3 -228
  94. package/dist/tools/input.d.ts.map +1 -1
  95. package/dist/tools/input.js +190 -129
  96. package/dist/tools/input.js.map +1 -1
  97. package/dist/tools/logs.d.ts +3 -47
  98. package/dist/tools/logs.d.ts.map +1 -1
  99. package/dist/tools/logs.js +100 -127
  100. package/dist/tools/logs.js.map +1 -1
  101. package/dist/tools/manage.d.ts +6 -51
  102. package/dist/tools/manage.d.ts.map +1 -1
  103. package/dist/tools/manage.js +284 -209
  104. package/dist/tools/manage.js.map +1 -1
  105. package/dist/tools/schema.d.ts +75 -168
  106. package/dist/tools/schema.d.ts.map +1 -1
  107. package/dist/tools/schema.js +276 -126
  108. package/dist/tools/schema.js.map +1 -1
  109. package/dist/tools/wait.d.ts +3 -191
  110. package/dist/tools/wait.d.ts.map +1 -1
  111. package/dist/tools/wait.js +298 -155
  112. package/dist/tools/wait.js.map +1 -1
  113. package/package.json +4 -5
  114. package/scripts/start-chrome-headless.sh +0 -37
  115. package/scripts/start-chrome.sh +0 -41
@@ -1,7 +1,7 @@
1
1
  /**
2
- * 公共 JSON Schema 定义
2
+ * 公共 Schema 定义
3
3
  *
4
- * 用于 MCP 工具的 inputSchema,确保客户端侧的类型提示和契约校验
4
+ * Target Zod Schema 和定位参数转换
5
5
  */
6
6
  import { z } from 'zod';
7
7
  /**
@@ -19,133 +19,283 @@ import { z } from 'zod';
19
19
  * - xpath: XPath 定位
20
20
  * - x/y: 坐标定位
21
21
  */
22
- export const targetZodSchema = z.union([
23
- z.object({ role: z.string(), name: z.string().optional() }),
24
- z.object({ text: z.string(), exact: z.boolean().optional() }),
25
- z.object({ label: z.string(), exact: z.boolean().optional() }),
26
- z.object({ placeholder: z.string(), exact: z.boolean().optional() }),
27
- z.object({ title: z.string(), exact: z.boolean().optional() }),
28
- z.object({ alt: z.string(), exact: z.boolean().optional() }),
29
- z.object({ testId: z.string() }),
30
- z.object({ css: z.string() }),
31
- z.object({ xpath: z.string() }),
32
- z.object({ x: z.number(), y: z.number() }),
33
- ]);
22
+ const targetObjectSchema = z.intersection(z.union([
23
+ z.object({
24
+ role: z.string().describe('ARIA role(如 button、link、textbox)'),
25
+ name: z.string().optional().describe('可访问名称(可选)'),
26
+ }),
27
+ // CSS+text 必须在纯 text / 纯 CSS 之前:z.object strip 未知字段
28
+ z.object({
29
+ css: z.string().describe('CSS 选择器'),
30
+ text: z.string().describe('文本内容'),
31
+ exact: z.boolean().optional().describe('是否精确匹配(默认 false)'),
32
+ }),
33
+ z.object({
34
+ text: z.string().describe('文本内容'),
35
+ exact: z.boolean().optional().describe('是否精确匹配(默认 false)'),
36
+ }),
37
+ z.object({
38
+ label: z.string().describe('label 文本'),
39
+ exact: z.boolean().optional().describe('是否精确匹配(默认 false)'),
40
+ }),
41
+ z.object({
42
+ placeholder: z.string().describe('placeholder 文本'),
43
+ exact: z.boolean().optional().describe('是否精确匹配(默认 false)'),
44
+ }),
45
+ z.object({
46
+ title: z.string().describe('title 属性值'),
47
+ exact: z.boolean().optional().describe('是否精确匹配(默认 false)'),
48
+ }),
49
+ z.object({
50
+ alt: z.string().describe('alt 属性值'),
51
+ exact: z.boolean().optional().describe('是否精确匹配(默认 false)'),
52
+ }),
53
+ z.object({ testId: z.string().describe('data-testid 值') }),
54
+ z.object({ css: z.string().describe('CSS 选择器') }),
55
+ z.object({ xpath: z.string().describe('XPath 表达式') }),
56
+ z.object({
57
+ x: z.number().describe('X 坐标(像素)'),
58
+ y: z.number().describe('Y 坐标(像素)'),
59
+ }),
60
+ ]), z.object({
61
+ nth: z.number().int().min(0).optional()
62
+ .describe('第 N 个匹配元素(从 0 开始,默认 0 即第一个)'),
63
+ }));
34
64
  /**
35
- * Target JSON Schema(MCP 契约)
65
+ * Target Zod Schema(运行时校验)
66
+ *
67
+ * 支持对象形式或 JSON 字符串形式(兼容某些客户端的序列化行为)
68
+ */
69
+ export const targetZodSchema = z.preprocess((val) => {
70
+ // 如果是字符串,尝试解析为 JSON
71
+ if (typeof val === 'string') {
72
+ try {
73
+ return JSON.parse(val);
74
+ }
75
+ catch {
76
+ return val;
77
+ }
78
+ }
79
+ return val;
80
+ }, targetObjectSchema);
81
+ /**
82
+ * 转义 CSS 属性选择器中的值(防止引号注入)
83
+ */
84
+ function escapeAttrValue(value) {
85
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
86
+ }
87
+ /**
88
+ * 转义 XPath 字符串字面量(处理包含引号的值)
89
+ */
90
+ function escapeXPathString(str) {
91
+ if (!str.includes('\'')) {
92
+ return `'${str}'`;
93
+ }
94
+ if (!str.includes('"')) {
95
+ return `"${str}"`;
96
+ }
97
+ // 同时包含单双引号:用 concat 拼接
98
+ const parts = [];
99
+ let current = '';
100
+ for (const char of str) {
101
+ if (char === '\'') {
102
+ if (current) {
103
+ parts.push(`'${current}'`);
104
+ }
105
+ parts.push(`"'"`);
106
+ current = '';
107
+ }
108
+ else {
109
+ current += char;
110
+ }
111
+ }
112
+ if (current) {
113
+ parts.push(`'${current}'`);
114
+ }
115
+ return `concat(${parts.join(',')})`;
116
+ }
117
+ /**
118
+ * 从 Target 中提取 exact 标志
119
+ */
120
+ function getExact(target) {
121
+ return target.exact ?? false;
122
+ }
123
+ /**
124
+ * 隐式 ARIA role → HTML 标签/选择器 映射
36
125
  *
37
- * 使用 oneOf 表示互斥的定位方式,客户端可根据此生成参数提示
126
+ * 浏览器为特定 HTML 元素自动赋予隐式 ARIA role(如 <button> → button),
127
+ * 仅匹配 [role="button"] 会遗漏这些元素。此映射补齐隐式匹配。
128
+ * 参考:https://www.w3.org/TR/html-aria/#docconformance
38
129
  */
39
- export const targetJsonSchema = {
40
- oneOf: [
41
- {
42
- type: 'object',
43
- title: '可访问性树定位',
44
- description: '通过 ARIA role 和 name 定位元素',
45
- properties: {
46
- role: { type: 'string', description: 'ARIA role(如 button、link、textbox)' },
47
- name: { type: 'string', description: '可访问名称(可选)' },
48
- },
49
- required: ['role'],
50
- additionalProperties: false,
51
- },
52
- {
53
- type: 'object',
54
- title: '文本内容定位',
55
- description: '通过元素文本内容定位',
56
- properties: {
57
- text: { type: 'string', description: '文本内容' },
58
- exact: { type: 'boolean', description: '是否精确匹配(默认 false)' },
59
- },
60
- required: ['text'],
61
- additionalProperties: false,
62
- },
63
- {
64
- type: 'object',
65
- title: 'Label 定位',
66
- description: '通过表单 label 文本定位关联的输入元素',
67
- properties: {
68
- label: { type: 'string', description: 'label 文本' },
69
- exact: { type: 'boolean', description: '是否精确匹配(默认 false)' },
70
- },
71
- required: ['label'],
72
- additionalProperties: false,
73
- },
74
- {
75
- type: 'object',
76
- title: 'Placeholder 定位',
77
- description: '通过输入框的 placeholder 属性定位',
78
- properties: {
79
- placeholder: { type: 'string', description: 'placeholder 文本' },
80
- exact: { type: 'boolean', description: '是否精确匹配(默认 false)' },
81
- },
82
- required: ['placeholder'],
83
- additionalProperties: false,
84
- },
85
- {
86
- type: 'object',
87
- title: 'Title 属性定位',
88
- description: '通过元素的 title 属性定位',
89
- properties: {
90
- title: { type: 'string', description: 'title 属性值' },
91
- exact: { type: 'boolean', description: '是否精确匹配(默认 false)' },
92
- },
93
- required: ['title'],
94
- additionalProperties: false,
95
- },
96
- {
97
- type: 'object',
98
- title: 'Alt 属性定位',
99
- description: '通过图片的 alt 属性定位',
100
- properties: {
101
- alt: { type: 'string', description: 'alt 属性值' },
102
- exact: { type: 'boolean', description: '是否精确匹配(默认 false)' },
103
- },
104
- required: ['alt'],
105
- additionalProperties: false,
106
- },
107
- {
108
- type: 'object',
109
- title: 'TestId 定位',
110
- description: '通过 data-testid 属性定位',
111
- properties: {
112
- testId: { type: 'string', description: 'data-testid 值' },
113
- },
114
- required: ['testId'],
115
- additionalProperties: false,
116
- },
117
- {
118
- type: 'object',
119
- title: 'CSS 选择器定位',
120
- description: '通过 CSS 选择器定位',
121
- properties: {
122
- css: { type: 'string', description: 'CSS 选择器' },
123
- },
124
- required: ['css'],
125
- additionalProperties: false,
126
- },
127
- {
128
- type: 'object',
129
- title: 'XPath 定位',
130
- description: '通过 XPath 表达式定位',
131
- properties: {
132
- xpath: { type: 'string', description: 'XPath 表达式' },
133
- },
134
- required: ['xpath'],
135
- additionalProperties: false,
136
- },
137
- {
138
- type: 'object',
139
- title: '坐标定位',
140
- description: '通过页面坐标定位',
141
- properties: {
142
- x: { type: 'number', description: 'X 坐标(像素)' },
143
- y: { type: 'number', description: 'Y 坐标(像素)' },
144
- },
145
- required: ['x', 'y'],
146
- additionalProperties: false,
147
- },
130
+ const IMPLICIT_ROLE_SELECTORS = {
131
+ button: ['button', 'input[type="submit"]', 'input[type="button"]', 'input[type="reset"]', 'summary'],
132
+ link: ['a[href]', 'area[href]'],
133
+ textbox: [
134
+ 'input:not([type])', 'input[type="text"]', 'input[type="email"]',
135
+ 'input[type="url"]', 'input[type="tel"]', 'input[type="search"]',
136
+ 'input[type="password"]', 'textarea', '[contenteditable="true"]',
148
137
  ],
149
- description: '目标元素定位方式',
138
+ checkbox: ['input[type="checkbox"]'],
139
+ radio: ['input[type="radio"]'],
140
+ combobox: ['select'],
141
+ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
142
+ image: ['img[alt]'],
143
+ img: ['img[alt]'],
144
+ navigation: ['nav'],
145
+ main: ['main'],
146
+ banner: ['header'],
147
+ contentinfo: ['footer'],
148
+ region: ['section[aria-label]', 'section[aria-labelledby]'],
149
+ article: ['article'],
150
+ complementary: ['aside'],
151
+ form: ['form[aria-label]', 'form[aria-labelledby]'],
152
+ table: ['table'],
153
+ list: ['ul', 'ol', 'menu'],
154
+ listitem: ['li'],
155
+ };
156
+ /**
157
+ * 隐式 ARIA role → XPath self:: 条件映射
158
+ *
159
+ * 用于 role+name 组合定位:需要 xpath 表达多来源可访问名称过滤。
160
+ * 与 IMPLICIT_ROLE_SELECTORS 内容对应,只是语法不同。
161
+ */
162
+ const IMPLICIT_ROLE_XPATH = {
163
+ button: 'self::button or self::input[@type="submit"] or self::input[@type="button"] or self::input[@type="reset"] or self::summary',
164
+ link: 'self::a[@href] or self::area[@href]',
165
+ textbox: 'self::input[not(@type)] or self::input[@type="text"] or self::input[@type="email"] or self::input[@type="url"] or self::input[@type="tel"] or self::input[@type="search"] or self::input[@type="password"] or self::textarea or self::*[@contenteditable="true"]',
166
+ checkbox: 'self::input[@type="checkbox"]',
167
+ radio: 'self::input[@type="radio"]',
168
+ combobox: 'self::select',
169
+ heading: 'self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6',
170
+ image: 'self::img[@alt]',
171
+ img: 'self::img[@alt]',
172
+ navigation: 'self::nav',
173
+ main: 'self::main',
174
+ banner: 'self::header',
175
+ contentinfo: 'self::footer',
176
+ region: 'self::section[@aria-label or @aria-labelledby]',
177
+ article: 'self::article',
178
+ complementary: 'self::aside',
179
+ form: 'self::form[@aria-label or @aria-labelledby]',
180
+ table: 'self::table',
181
+ list: 'self::ul or self::ol or self::menu',
182
+ listitem: 'self::li',
150
183
  };
184
+ /**
185
+ * 将 Target 对象解析为 find() 所需的查询参数
186
+ *
187
+ * 统一处理各种定位方式到 {selector, text, xpath} 的映射,
188
+ * 避免在 extract/input/wait 中重复编写相同逻辑。
189
+ *
190
+ * exact 语义(默认 false):
191
+ * - CSS 属性(placeholder/title/alt):false → *= 子串匹配,true → = 精确匹配
192
+ * - text:false → Extension find 的 includes 子串匹配,true → xpath 精确匹配
193
+ * - label:xpath 同时匹配 aria-label、<label for> 关联、<label> 内嵌控件
194
+ * - role:无 name 时 CSS 匹配隐式+显式 role;有 name 时 xpath 匹配多来源可访问名称
195
+ * - testId/css/xpath:exact 不影响
196
+ * - role 值自动 lowercase(ARIA role 不区分大小写)
197
+ */
198
+ export function targetToFindParams(target) {
199
+ let selector;
200
+ let text;
201
+ let xpath;
202
+ if ('css' in target && target.css) {
203
+ selector = target.css;
204
+ // CSS + 文本组合定位:先 CSS 筛选,再按 text 过滤
205
+ if ('text' in target && target.text) {
206
+ text = target.text;
207
+ }
208
+ }
209
+ else if ('xpath' in target && target.xpath) {
210
+ xpath = target.xpath;
211
+ }
212
+ else if ('text' in target && target.text) {
213
+ if (getExact(target)) {
214
+ // 精确匹配:通过 xpath 匹配 textContent 完全相等的元素
215
+ xpath = `//*[normalize-space(.)=${escapeXPathString(target.text)}]`;
216
+ }
217
+ else {
218
+ text = target.text;
219
+ }
220
+ }
221
+ else if ('role' in target && target.role) {
222
+ const roleLower = target.role.toLowerCase();
223
+ if ('name' in target && target.name) {
224
+ // role + name:xpath 同时匹配隐式/显式 role 和多来源可访问名称
225
+ const roleConditions = [`@role=${escapeXPathString(roleLower)}`];
226
+ const implicitXPath = IMPLICIT_ROLE_XPATH[roleLower];
227
+ if (implicitXPath) {
228
+ roleConditions.push(implicitXPath);
229
+ }
230
+ const nameStr = escapeXPathString(target.name);
231
+ // 多来源可访问名称:textContent, aria-label, title, placeholder, alt, value, label-for
232
+ // 注意:@value 读 HTML attribute(初始值),脚本动态写入的值需用 evaluate 定位
233
+ const nameConditions = [
234
+ `contains(.,${nameStr})`,
235
+ `contains(@aria-label,${nameStr})`,
236
+ `contains(@title,${nameStr})`,
237
+ `contains(@placeholder,${nameStr})`,
238
+ `contains(@alt,${nameStr})`,
239
+ `contains(@value,${nameStr})`,
240
+ `@id=//label[contains(.,${nameStr})]/@for`,
241
+ ].join(' or ');
242
+ xpath = `//*[(${roleConditions.join(' or ')}) and (${nameConditions})]`;
243
+ }
244
+ else {
245
+ // role only:CSS 选择器匹配隐式标签 + 显式 role
246
+ const escapedRole = escapeAttrValue(roleLower);
247
+ const selectors = [`[role="${escapedRole}"]`];
248
+ const implicit = IMPLICIT_ROLE_SELECTORS[roleLower];
249
+ if (implicit) {
250
+ selectors.push(...implicit);
251
+ }
252
+ selector = selectors.join(',');
253
+ }
254
+ }
255
+ else if ('label' in target && target.label) {
256
+ // xpath 同时匹配 aria-label、<label for="id"> 关联、<label> 内嵌控件
257
+ const xpathStr = escapeXPathString(target.label);
258
+ const formControls = 'self::input or self::select or self::textarea';
259
+ if (getExact(target)) {
260
+ const labelMatch = `normalize-space(.)=${xpathStr}`;
261
+ xpath = `//*[@aria-label=${xpathStr}]`
262
+ +
263
+ ` | //*[@id=//label[${labelMatch}]/@for]`
264
+ +
265
+ ` | //label[${labelMatch}]/descendant::*[${formControls}]`
266
+ +
267
+ ` | //label[${labelMatch}]/following-sibling::*[${formControls}][1]`
268
+ +
269
+ ` | //label[${labelMatch}]/parent::*/following-sibling::*[1]/descendant::*[${formControls}]`;
270
+ }
271
+ else {
272
+ const labelMatch = `contains(.,${xpathStr})`;
273
+ xpath = `//*[contains(@aria-label,${xpathStr})]`
274
+ +
275
+ ` | //*[@id=//label[${labelMatch}]/@for]`
276
+ +
277
+ ` | //label[${labelMatch}]/descendant::*[${formControls}]`
278
+ +
279
+ ` | //label[${labelMatch}]/following-sibling::*[${formControls}][1]`
280
+ +
281
+ ` | //label[${labelMatch}]/parent::*/following-sibling::*[1]/descendant::*[${formControls}]`;
282
+ }
283
+ }
284
+ else if ('placeholder' in target && target.placeholder) {
285
+ const escaped = escapeAttrValue(target.placeholder);
286
+ selector = getExact(target) ? `[placeholder="${escaped}"]` : `[placeholder*="${escaped}"]`;
287
+ }
288
+ else if ('title' in target && target.title) {
289
+ const escaped = escapeAttrValue(target.title);
290
+ selector = getExact(target) ? `[title="${escaped}"]` : `[title*="${escaped}"]`;
291
+ }
292
+ else if ('alt' in target && target.alt) {
293
+ const escaped = escapeAttrValue(target.alt);
294
+ selector = getExact(target) ? `[alt="${escaped}"]` : `[alt*="${escaped}"]`;
295
+ }
296
+ else if ('testId' in target && target.testId) {
297
+ selector = `[data-testid="${escapeAttrValue(target.testId)}"]`;
298
+ }
299
+ return { selector, text, xpath, nth: target.nth };
300
+ }
151
301
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
@@ -7,197 +7,9 @@
7
7
  * - time: 固定等待时间
8
8
  * - idle: 等待网络空闲
9
9
  */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
11
  /**
11
- * wait 工具定义
12
+ * 注册 wait 工具
12
13
  */
13
- export declare const waitToolDefinition: {
14
- name: string;
15
- description: string;
16
- inputSchema: {
17
- type: "object";
18
- properties: {
19
- for: {
20
- type: string;
21
- enum: string[];
22
- description: string;
23
- };
24
- target: {
25
- description: string;
26
- oneOf: readonly [{
27
- readonly type: "object";
28
- readonly title: "可访问性树定位";
29
- readonly description: "通过 ARIA role 和 name 定位元素";
30
- readonly properties: {
31
- readonly role: {
32
- readonly type: "string";
33
- readonly description: "ARIA role(如 button、link、textbox)";
34
- };
35
- readonly name: {
36
- readonly type: "string";
37
- readonly description: "可访问名称(可选)";
38
- };
39
- };
40
- readonly required: readonly ["role"];
41
- readonly additionalProperties: false;
42
- }, {
43
- readonly type: "object";
44
- readonly title: "文本内容定位";
45
- readonly description: "通过元素文本内容定位";
46
- readonly properties: {
47
- readonly text: {
48
- readonly type: "string";
49
- readonly description: "文本内容";
50
- };
51
- readonly exact: {
52
- readonly type: "boolean";
53
- readonly description: "是否精确匹配(默认 false)";
54
- };
55
- };
56
- readonly required: readonly ["text"];
57
- readonly additionalProperties: false;
58
- }, {
59
- readonly type: "object";
60
- readonly title: "Label 定位";
61
- readonly description: "通过表单 label 文本定位关联的输入元素";
62
- readonly properties: {
63
- readonly label: {
64
- readonly type: "string";
65
- readonly description: "label 文本";
66
- };
67
- readonly exact: {
68
- readonly type: "boolean";
69
- readonly description: "是否精确匹配(默认 false)";
70
- };
71
- };
72
- readonly required: readonly ["label"];
73
- readonly additionalProperties: false;
74
- }, {
75
- readonly type: "object";
76
- readonly title: "Placeholder 定位";
77
- readonly description: "通过输入框的 placeholder 属性定位";
78
- readonly properties: {
79
- readonly placeholder: {
80
- readonly type: "string";
81
- readonly description: "placeholder 文本";
82
- };
83
- readonly exact: {
84
- readonly type: "boolean";
85
- readonly description: "是否精确匹配(默认 false)";
86
- };
87
- };
88
- readonly required: readonly ["placeholder"];
89
- readonly additionalProperties: false;
90
- }, {
91
- readonly type: "object";
92
- readonly title: "Title 属性定位";
93
- readonly description: "通过元素的 title 属性定位";
94
- readonly properties: {
95
- readonly title: {
96
- readonly type: "string";
97
- readonly description: "title 属性值";
98
- };
99
- readonly exact: {
100
- readonly type: "boolean";
101
- readonly description: "是否精确匹配(默认 false)";
102
- };
103
- };
104
- readonly required: readonly ["title"];
105
- readonly additionalProperties: false;
106
- }, {
107
- readonly type: "object";
108
- readonly title: "Alt 属性定位";
109
- readonly description: "通过图片的 alt 属性定位";
110
- readonly properties: {
111
- readonly alt: {
112
- readonly type: "string";
113
- readonly description: "alt 属性值";
114
- };
115
- readonly exact: {
116
- readonly type: "boolean";
117
- readonly description: "是否精确匹配(默认 false)";
118
- };
119
- };
120
- readonly required: readonly ["alt"];
121
- readonly additionalProperties: false;
122
- }, {
123
- readonly type: "object";
124
- readonly title: "TestId 定位";
125
- readonly description: "通过 data-testid 属性定位";
126
- readonly properties: {
127
- readonly testId: {
128
- readonly type: "string";
129
- readonly description: "data-testid 值";
130
- };
131
- };
132
- readonly required: readonly ["testId"];
133
- readonly additionalProperties: false;
134
- }, {
135
- readonly type: "object";
136
- readonly title: "CSS 选择器定位";
137
- readonly description: "通过 CSS 选择器定位";
138
- readonly properties: {
139
- readonly css: {
140
- readonly type: "string";
141
- readonly description: "CSS 选择器";
142
- };
143
- };
144
- readonly required: readonly ["css"];
145
- readonly additionalProperties: false;
146
- }, {
147
- readonly type: "object";
148
- readonly title: "XPath 定位";
149
- readonly description: "通过 XPath 表达式定位";
150
- readonly properties: {
151
- readonly xpath: {
152
- readonly type: "string";
153
- readonly description: "XPath 表达式";
154
- };
155
- };
156
- readonly required: readonly ["xpath"];
157
- readonly additionalProperties: false;
158
- }, {
159
- readonly type: "object";
160
- readonly title: "坐标定位";
161
- readonly description: "通过页面坐标定位";
162
- readonly properties: {
163
- readonly x: {
164
- readonly type: "number";
165
- readonly description: "X 坐标(像素)";
166
- };
167
- readonly y: {
168
- readonly type: "number";
169
- readonly description: "Y 坐标(像素)";
170
- };
171
- };
172
- readonly required: readonly ["x", "y"];
173
- readonly additionalProperties: false;
174
- }];
175
- };
176
- state: {
177
- type: string;
178
- enum: string[];
179
- description: string;
180
- };
181
- ms: {
182
- type: string;
183
- description: string;
184
- };
185
- timeout: {
186
- type: string;
187
- description: string;
188
- };
189
- };
190
- required: string[];
191
- };
192
- };
193
- /**
194
- * wait 工具处理器
195
- */
196
- export declare function handleWait(params: unknown): Promise<{
197
- content: Array<{
198
- type: 'text';
199
- text: string;
200
- }>;
201
- isError?: boolean;
202
- }>;
14
+ export declare function registerWaitTool(server: McpServer): void;
203
15
  //# sourceMappingURL=wait.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/tools/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9B,CAAA;AAeD;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IACvD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CA8HD"}
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/tools/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAA;AAmbtE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAKxD"}