weixin-devtools-mcp 0.0.1 → 0.1.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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +127 -128
  3. package/build/MiniProgramContext.d.ts +317 -0
  4. package/build/MiniProgramContext.d.ts.map +1 -0
  5. package/build/MiniProgramContext.js +696 -0
  6. package/build/MiniProgramContext.js.map +1 -0
  7. package/build/collectors/Collector.d.ts +127 -0
  8. package/build/collectors/Collector.d.ts.map +1 -0
  9. package/build/collectors/Collector.js +252 -0
  10. package/build/collectors/Collector.js.map +1 -0
  11. package/build/collectors/ConsoleCollector.d.ts +104 -0
  12. package/build/collectors/ConsoleCollector.d.ts.map +1 -0
  13. package/build/collectors/ConsoleCollector.js +157 -0
  14. package/build/collectors/ConsoleCollector.js.map +1 -0
  15. package/build/collectors/NetworkCollector.d.ts +167 -0
  16. package/build/collectors/NetworkCollector.d.ts.map +1 -0
  17. package/build/collectors/NetworkCollector.js +265 -0
  18. package/build/collectors/NetworkCollector.js.map +1 -0
  19. package/build/collectors/index.d.ts +13 -0
  20. package/build/collectors/index.d.ts.map +1 -0
  21. package/build/collectors/index.js +17 -0
  22. package/build/collectors/index.js.map +1 -0
  23. package/build/config/tool-profile.d.ts +30 -0
  24. package/build/config/tool-profile.d.ts.map +1 -0
  25. package/build/config/tool-profile.js +138 -0
  26. package/build/config/tool-profile.js.map +1 -0
  27. package/build/connection/adapters.d.ts +3 -0
  28. package/build/connection/adapters.d.ts.map +1 -0
  29. package/build/connection/adapters.js +134 -0
  30. package/build/connection/adapters.js.map +1 -0
  31. package/build/connection/errors.d.ts +34 -0
  32. package/build/connection/errors.d.ts.map +1 -0
  33. package/build/connection/errors.js +101 -0
  34. package/build/connection/errors.js.map +1 -0
  35. package/build/connection/health-probe.d.ts +4 -0
  36. package/build/connection/health-probe.d.ts.map +1 -0
  37. package/build/connection/health-probe.js +60 -0
  38. package/build/connection/health-probe.js.map +1 -0
  39. package/build/connection/index.d.ts +6 -0
  40. package/build/connection/index.d.ts.map +1 -0
  41. package/build/connection/index.js +6 -0
  42. package/build/connection/index.js.map +1 -0
  43. package/build/connection/manager.d.ts +19 -0
  44. package/build/connection/manager.d.ts.map +1 -0
  45. package/build/connection/manager.js +227 -0
  46. package/build/connection/manager.js.map +1 -0
  47. package/build/connection/resolver.d.ts +3 -0
  48. package/build/connection/resolver.d.ts.map +1 -0
  49. package/build/connection/resolver.js +99 -0
  50. package/build/connection/resolver.js.map +1 -0
  51. package/build/connection/types.d.ts +95 -0
  52. package/build/connection/types.d.ts.map +1 -0
  53. package/build/connection/types.js +16 -0
  54. package/build/connection/types.js.map +1 -0
  55. package/build/core/assertion.d.ts +22 -0
  56. package/build/core/assertion.d.ts.map +1 -0
  57. package/build/core/assertion.js +318 -0
  58. package/build/core/assertion.js.map +1 -0
  59. package/build/core/connection.d.ts +37 -0
  60. package/build/core/connection.d.ts.map +1 -0
  61. package/build/core/connection.js +745 -0
  62. package/build/core/connection.js.map +1 -0
  63. package/build/core/index.d.ts +13 -0
  64. package/build/core/index.d.ts.map +1 -0
  65. package/build/core/index.js +19 -0
  66. package/build/core/index.js.map +1 -0
  67. package/build/core/interaction.d.ts +22 -0
  68. package/build/core/interaction.d.ts.map +1 -0
  69. package/build/core/interaction.js +185 -0
  70. package/build/core/interaction.js.map +1 -0
  71. package/build/core/navigation.d.ts +26 -0
  72. package/build/core/navigation.d.ts.map +1 -0
  73. package/build/core/navigation.js +210 -0
  74. package/build/core/navigation.js.map +1 -0
  75. package/build/core/query.d.ts +14 -0
  76. package/build/core/query.d.ts.map +1 -0
  77. package/build/core/query.js +191 -0
  78. package/build/core/query.js.map +1 -0
  79. package/build/core/screenshot.d.ts +10 -0
  80. package/build/core/screenshot.d.ts.map +1 -0
  81. package/build/core/screenshot.js +93 -0
  82. package/build/core/screenshot.js.map +1 -0
  83. package/build/core/snapshot.d.ts +17 -0
  84. package/build/core/snapshot.d.ts.map +1 -0
  85. package/build/core/snapshot.js +225 -0
  86. package/build/core/snapshot.js.map +1 -0
  87. package/build/core/types.d.ts +250 -0
  88. package/build/core/types.d.ts.map +1 -0
  89. package/build/core/types.js +6 -0
  90. package/build/core/types.js.map +1 -0
  91. package/build/formatters/consoleFormatter.d.ts +50 -0
  92. package/build/formatters/consoleFormatter.d.ts.map +1 -0
  93. package/build/formatters/consoleFormatter.js +116 -0
  94. package/build/formatters/consoleFormatter.js.map +1 -0
  95. package/build/formatters/snapshotFormatter.d.ts +41 -0
  96. package/build/formatters/snapshotFormatter.d.ts.map +1 -0
  97. package/build/formatters/snapshotFormatter.js +156 -0
  98. package/build/formatters/snapshotFormatter.js.map +1 -0
  99. package/build/index.d.ts +11 -0
  100. package/build/index.d.ts.map +1 -0
  101. package/build/index.js +45 -9
  102. package/build/index.js.map +1 -0
  103. package/build/server.d.ts +7 -0
  104. package/build/server.d.ts.map +1 -0
  105. package/build/server.js +88 -32
  106. package/build/server.js.map +1 -0
  107. package/build/tools/ToolDefinition.d.ts +265 -0
  108. package/build/tools/ToolDefinition.d.ts.map +1 -0
  109. package/build/tools/ToolDefinition.js +16 -7
  110. package/build/tools/ToolDefinition.js.map +1 -0
  111. package/build/tools/assert.d.ts +17 -0
  112. package/build/tools/assert.d.ts.map +1 -0
  113. package/build/tools/assert.js +63 -103
  114. package/build/tools/assert.js.map +1 -0
  115. package/build/tools/connection.d.ts +13 -0
  116. package/build/tools/connection.d.ts.map +1 -0
  117. package/build/tools/connection.js +338 -611
  118. package/build/tools/connection.js.map +1 -0
  119. package/build/tools/console.d.ts +20 -0
  120. package/build/tools/console.d.ts.map +1 -0
  121. package/build/tools/console.js +162 -152
  122. package/build/tools/console.js.map +1 -0
  123. package/build/tools/diagnose.d.ts +22 -0
  124. package/build/tools/diagnose.d.ts.map +1 -0
  125. package/build/tools/diagnose.js +406 -13
  126. package/build/tools/diagnose.js.map +1 -0
  127. package/build/tools/index.d.ts +6 -0
  128. package/build/tools/index.d.ts.map +1 -0
  129. package/build/tools/index.js +3 -77
  130. package/build/tools/index.js.map +1 -0
  131. package/build/tools/input.d.ts +21 -0
  132. package/build/tools/input.d.ts.map +1 -0
  133. package/build/tools/input.js +73 -139
  134. package/build/tools/input.js.map +1 -0
  135. package/build/tools/navigate.d.ts +21 -0
  136. package/build/tools/navigate.d.ts.map +1 -0
  137. package/build/tools/navigate.js +63 -126
  138. package/build/tools/navigate.js.map +1 -0
  139. package/build/tools/network.d.ts +21 -0
  140. package/build/tools/network.d.ts.map +1 -0
  141. package/build/tools/network.js +214 -1044
  142. package/build/tools/network.js.map +1 -0
  143. package/build/tools/page.d.ts +13 -0
  144. package/build/tools/page.d.ts.map +1 -0
  145. package/build/tools/page.js +6 -3
  146. package/build/tools/page.js.map +1 -0
  147. package/build/tools/screenshot.d.ts +9 -0
  148. package/build/tools/screenshot.d.ts.map +1 -0
  149. package/build/tools/screenshot.js +3 -1
  150. package/build/tools/screenshot.js.map +1 -0
  151. package/build/tools/script.d.ts +6 -0
  152. package/build/tools/script.d.ts.map +1 -0
  153. package/build/tools/script.js +92 -0
  154. package/build/tools/script.js.map +1 -0
  155. package/build/tools/snapshot.d.ts +9 -0
  156. package/build/tools/snapshot.d.ts.map +1 -0
  157. package/build/tools/snapshot.js +78 -12
  158. package/build/tools/snapshot.js.map +1 -0
  159. package/build/tools/tools.d.ts +15 -0
  160. package/build/tools/tools.d.ts.map +1 -0
  161. package/build/tools/tools.js +63 -0
  162. package/build/tools/tools.js.map +1 -0
  163. package/build/tools.d.ts +431 -0
  164. package/build/tools.d.ts.map +1 -0
  165. package/build/tools.js +258 -118
  166. package/build/tools.js.map +1 -0
  167. package/build/types/errors.d.ts +189 -0
  168. package/build/types/errors.d.ts.map +1 -0
  169. package/build/types/errors.js +257 -0
  170. package/build/types/errors.js.map +1 -0
  171. package/build/utils/error.d.ts +6 -0
  172. package/build/utils/error.d.ts.map +1 -0
  173. package/build/utils/error.js +11 -0
  174. package/build/utils/error.js.map +1 -0
  175. package/build/utils/idGenerator.d.ts +21 -0
  176. package/build/utils/idGenerator.d.ts.map +1 -0
  177. package/build/utils/idGenerator.js +23 -0
  178. package/build/utils/idGenerator.js.map +1 -0
  179. package/build/version.d.ts +7 -0
  180. package/build/version.d.ts.map +1 -0
  181. package/build/version.js +10 -0
  182. package/build/version.js.map +1 -0
  183. package/package.json +31 -9
@@ -4,14 +4,15 @@
4
4
  */
5
5
  /**
6
6
  * 工具分类枚举
7
+ * 参考 chrome-devtools-mcp 的按类别暴露机制
7
8
  */
8
- export var ToolCategories;
9
- (function (ToolCategories) {
10
- ToolCategories["CONNECTION"] = "Connection";
11
- ToolCategories["PAGE_INTERACTION"] = "Page interaction";
12
- ToolCategories["AUTOMATION"] = "Automation";
13
- ToolCategories["DEBUGGING"] = "Debugging";
14
- })(ToolCategories || (ToolCategories = {}));
9
+ export var ToolCategory;
10
+ (function (ToolCategory) {
11
+ ToolCategory["CORE"] = "core";
12
+ ToolCategory["CONSOLE"] = "console";
13
+ ToolCategory["NETWORK"] = "network";
14
+ ToolCategory["DEBUG"] = "debug";
15
+ })(ToolCategory || (ToolCategory = {}));
15
16
  /**
16
17
  * 定义工具的辅助函数
17
18
  */
@@ -31,6 +32,7 @@ export class SimpleToolResponse {
31
32
  responseLines = [];
32
33
  includeSnapshot = false;
33
34
  attachedImages = [];
35
+ structuredContent = {};
34
36
  appendResponseLine(text) {
35
37
  this.responseLines.push(text);
36
38
  }
@@ -40,6 +42,12 @@ export class SimpleToolResponse {
40
42
  attachImage(data, mimeType) {
41
43
  this.attachedImages.push({ data, mimeType });
42
44
  }
45
+ mergeStructuredContent(content) {
46
+ this.structuredContent = { ...this.structuredContent, ...content };
47
+ }
48
+ getStructuredContent() {
49
+ return { ...this.structuredContent };
50
+ }
43
51
  getResponseText() {
44
52
  return this.responseLines.join('\n');
45
53
  }
@@ -50,3 +58,4 @@ export class SimpleToolResponse {
50
58
  return this.attachedImages;
51
59
  }
52
60
  }
61
+ //# sourceMappingURL=ToolDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolDefinition.js","sourceRoot":"","sources":["../../src/tools/ToolDefinition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;;GAGG;AACH,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;IACnB,+BAAe,CAAA;AACjB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AA4QD;;GAEG;AACH,MAAM,UAAU,UAAU,CAA+B,UAMxD;IACC,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,aAAa,GAAa,EAAE,CAAC;IAC7B,eAAe,GAAG,KAAK,CAAC;IACxB,cAAc,GAA8C,EAAE,CAAC;IAC/D,iBAAiB,GAAsB,EAAE,CAAC;IAElD,kBAAkB,CAAC,IAAY;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,OAAgB;QACjC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,QAAgB;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,sBAAsB,CAAC,OAA0B;QAC/C,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;IACrE,CAAC;IAED,oBAAoB;QAClB,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 断言验证工具
3
+ * 提供各种元素状态和内容的断言验证功能
4
+ */
5
+ /**
6
+ * 断言元素文本内容
7
+ */
8
+ export declare const assertTextTool: import("./ToolDefinition.js").ToolDefinition;
9
+ /**
10
+ * 断言元素属性
11
+ */
12
+ export declare const assertAttributeTool: import("./ToolDefinition.js").ToolDefinition;
13
+ /**
14
+ * 断言元素状态(通用)
15
+ */
16
+ export declare const assertStateTool: import("./ToolDefinition.js").ToolDefinition;
17
+ //# sourceMappingURL=assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/tools/assert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+CH;;GAEG;AACH,eAAO,MAAM,cAAc,8CAsDzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB,8CAkD9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe,8CAyF1B,CAAC"}
@@ -3,94 +3,35 @@
3
3
  * 提供各种元素状态和内容的断言验证功能
4
4
  */
5
5
  import { z } from 'zod';
6
- import { defineTool } from './ToolDefinition.js';
7
- import { assertElementExists, assertElementVisible, assertElementText, assertElementAttribute } from '../tools.js';
8
- /**
9
- * 断言元素存在
10
- */
11
- export const assertExistsTool = defineTool({
12
- name: 'assert_exists',
13
- description: '断言元素存在或不存在',
14
- schema: z.object({
15
- selector: z.string().optional().describe('CSS选择器'),
16
- uid: z.string().optional().describe('元素UID'),
17
- shouldExist: z.boolean().describe('期望存在状态,true为存在,false为不存在'),
18
- timeout: z.number().optional().default(5000).describe('等待超时时间(毫秒),默认5000ms'),
19
- }),
20
- annotations: {
21
- audience: ['developers'],
22
- },
23
- handler: async (request, response, context) => {
24
- const { selector, uid, shouldExist, timeout } = request.params;
25
- if (!selector && !uid) {
26
- throw new Error('必须提供selector或uid参数');
27
- }
28
- if (!context.currentPage) {
29
- throw new Error('请先获取当前页面');
30
- }
31
- try {
32
- const options = {
33
- selector,
34
- uid,
35
- shouldExist,
36
- timeout
37
- };
38
- const result = await assertElementExists(context.currentPage, options);
39
- // 根据断言结果返回信息
40
- response.appendResponseLine(`断言结果: ${result.passed ? '通过' : '失败'}`);
41
- response.appendResponseLine(`消息: ${result.message}`);
42
- response.appendResponseLine(`期望: ${result.expected}`);
43
- response.appendResponseLine(`实际: ${result.actual}`);
44
- response.appendResponseLine(`时间戳: ${new Date(result.timestamp).toISOString()}`);
45
- if (!result.passed) {
46
- throw new Error(`断言失败: ${result.message}`);
47
- }
48
- }
49
- catch (error) {
50
- const errorMessage = error instanceof Error ? error.message : String(error);
51
- response.appendResponseLine(`断言执行失败: ${errorMessage}`);
52
- throw error;
53
- }
54
- },
55
- });
56
- /**
57
- * 断言元素可见性
58
- */
59
- export const assertVisibleTool = defineTool({
60
- name: 'assert_visible',
61
- description: '断言元素可见或不可见',
62
- schema: z.object({
63
- uid: z.string().describe('元素UID'),
64
- visible: z.boolean().describe('期望可见状态,true为可见,false为不可见'),
65
- }),
66
- annotations: {
67
- audience: ['developers'],
68
- },
69
- handler: async (request, response, context) => {
70
- const { uid, visible } = request.params;
71
- if (!context.currentPage) {
72
- throw new Error('请先获取当前页面');
73
- }
74
- try {
75
- const options = { uid, visible };
76
- const result = await assertElementVisible(context.currentPage, context.elementMap, options);
77
- // 根据断言结果返回信息
78
- response.appendResponseLine(`断言结果: ${result.passed ? '通过' : '失败'}`);
79
- response.appendResponseLine(`消息: ${result.message}`);
80
- response.appendResponseLine(`期望: ${result.expected ? '可见' : '不可见'}`);
81
- response.appendResponseLine(`实际: ${result.actual ? '可见' : '不可见'}`);
82
- response.appendResponseLine(`时间戳: ${new Date(result.timestamp).toISOString()}`);
83
- if (!result.passed) {
84
- throw new Error(`断言失败: ${result.message}`);
85
- }
86
- }
87
- catch (error) {
88
- const errorMessage = error instanceof Error ? error.message : String(error);
89
- response.appendResponseLine(`断言执行失败: ${errorMessage}`);
90
- throw error;
91
- }
92
- },
93
- });
6
+ import { assertElementVisible, assertElementText, assertElementAttribute, } from '../tools.js';
7
+ import { defineTool, ToolCategory } from './ToolDefinition.js';
8
+ // 注意: assert_exists 和 assert_visible 已合并到 assert_state
9
+ // 使用 assert_state 工具即可验证元素的存在性和可见性
10
+ function asBooleanStateLabel(value) {
11
+ return value ? 'true' : 'false';
12
+ }
13
+ function isTruthyAttribute(value) {
14
+ if (value === null) {
15
+ return false;
16
+ }
17
+ const normalized = value.trim().toLowerCase();
18
+ if (normalized.length === 0) {
19
+ return true;
20
+ }
21
+ return !['false', '0', 'no', 'off', 'null', 'undefined'].includes(normalized);
22
+ }
23
+ function buildBooleanStateResult(stateName, expected, actual) {
24
+ const passed = expected === actual;
25
+ return {
26
+ passed,
27
+ message: passed
28
+ ? `[${stateName}] 断言通过: ${asBooleanStateLabel(expected)}`
29
+ : `[${stateName}] 断言失败: 期望 ${asBooleanStateLabel(expected)},实际 ${asBooleanStateLabel(actual)}`,
30
+ expected,
31
+ actual,
32
+ timestamp: Date.now(),
33
+ };
34
+ }
94
35
  /**
95
36
  * 断言元素文本内容
96
37
  */
@@ -104,6 +45,7 @@ export const assertTextTool = defineTool({
104
45
  textMatches: z.string().optional().describe('正则表达式匹配'),
105
46
  }),
106
47
  annotations: {
48
+ category: ToolCategory.CORE,
107
49
  audience: ['developers'],
108
50
  },
109
51
  handler: async (request, response, context) => {
@@ -119,10 +61,9 @@ export const assertTextTool = defineTool({
119
61
  uid,
120
62
  text,
121
63
  textContains,
122
- textMatches
64
+ textMatches,
123
65
  };
124
66
  const result = await assertElementText(context.currentPage, context.elementMap, options);
125
- // 根据断言结果返回信息
126
67
  response.appendResponseLine(`断言结果: ${result.passed ? '通过' : '失败'}`);
127
68
  response.appendResponseLine(`消息: ${result.message}`);
128
69
  response.appendResponseLine(`期望: ${result.expected}`);
@@ -151,6 +92,7 @@ export const assertAttributeTool = defineTool({
151
92
  attributeValue: z.string().describe('期望的属性值'),
152
93
  }),
153
94
  annotations: {
95
+ category: ToolCategory.CORE,
154
96
  audience: ['developers'],
155
97
  },
156
98
  handler: async (request, response, context) => {
@@ -163,11 +105,10 @@ export const assertAttributeTool = defineTool({
163
105
  uid,
164
106
  attribute: {
165
107
  key: attributeKey,
166
- value: attributeValue
167
- }
108
+ value: attributeValue,
109
+ },
168
110
  };
169
111
  const result = await assertElementAttribute(context.currentPage, context.elementMap, options);
170
- // 根据断言结果返回信息
171
112
  response.appendResponseLine(`断言结果: ${result.passed ? '通过' : '失败'}`);
172
113
  response.appendResponseLine(`消息: ${result.message}`);
173
114
  response.appendResponseLine(`期望: ${result.expected}`);
@@ -198,6 +139,7 @@ export const assertStateTool = defineTool({
198
139
  focused: z.boolean().optional().describe('期望焦点状态'),
199
140
  }),
200
141
  annotations: {
142
+ category: ToolCategory.CORE,
201
143
  audience: ['developers'],
202
144
  },
203
145
  handler: async (request, response, context) => {
@@ -210,20 +152,37 @@ export const assertStateTool = defineTool({
210
152
  }
211
153
  try {
212
154
  const results = [];
213
- // 可见性断言
214
155
  if (visible !== undefined) {
215
- const options = { uid, visible };
216
- const result = await assertElementVisible(context.currentPage, context.elementMap, options);
217
- results.push(result);
156
+ const result = await assertElementVisible(context.currentPage, context.elementMap, { uid, visible });
157
+ results.push({
158
+ ...result,
159
+ message: `[visible] ${result.message}`,
160
+ });
161
+ }
162
+ if (enabled !== undefined || checked !== undefined || focused !== undefined) {
163
+ const element = await context.getElementByUid(uid);
164
+ if (enabled !== undefined) {
165
+ const disabledAttr = await element.attribute('disabled').catch(() => null);
166
+ const actualEnabled = !isTruthyAttribute(disabledAttr);
167
+ results.push(buildBooleanStateResult('enabled', enabled, actualEnabled));
168
+ }
169
+ if (checked !== undefined) {
170
+ const checkedAttr = await element.attribute('checked').catch(() => null);
171
+ const actualChecked = isTruthyAttribute(checkedAttr);
172
+ results.push(buildBooleanStateResult('checked', checked, actualChecked));
173
+ }
174
+ if (focused !== undefined) {
175
+ const focusAttr = await element.attribute('focus').catch(() => null);
176
+ const focusedAttr = focusAttr ?? await element.attribute('focused').catch(() => null);
177
+ const actualFocused = isTruthyAttribute(focusedAttr);
178
+ results.push(buildBooleanStateResult('focused', focused, actualFocused));
179
+ }
218
180
  }
219
- // TODO: 这里可以添加更多状态断言,如enabled、checked、focused
220
- // 目前只实现了visible,其他状态需要扩展底层函数
221
- // 汇总结果
222
- const allPassed = results.every(r => r.passed);
223
- const failedResults = results.filter(r => !r.passed);
181
+ const allPassed = results.every(result => result.passed);
182
+ const failedResults = results.filter(result => !result.passed);
224
183
  response.appendResponseLine(`断言结果: ${allPassed ? '全部通过' : '部分失败'}`);
225
184
  response.appendResponseLine(`检查项数: ${results.length}`);
226
- response.appendResponseLine(`通过项数: ${results.filter(r => r.passed).length}`);
185
+ response.appendResponseLine(`通过项数: ${results.filter(result => result.passed).length}`);
227
186
  response.appendResponseLine(`失败项数: ${failedResults.length}`);
228
187
  if (failedResults.length > 0) {
229
188
  response.appendResponseLine('');
@@ -243,3 +202,4 @@ export const assertStateTool = defineTool({
243
202
  }
244
203
  },
245
204
  });
205
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../src/tools/assert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 连接管理工具
3
+ * 提供 connect / reconnect / disconnect / status 能力
4
+ */
5
+ export declare const connectDevtoolsTool: import("./ToolDefinition.js").ToolDefinition;
6
+ export declare const reconnectDevtoolsTool: import("./ToolDefinition.js").ToolDefinition;
7
+ export declare const disconnectDevtoolsTool: import("./ToolDefinition.js").ToolDefinition;
8
+ export declare const getConnectionStatusTool: import("./ToolDefinition.js").ToolDefinition;
9
+ /**
10
+ * 获取当前页面信息
11
+ */
12
+ export declare const getCurrentPageTool: import("./ToolDefinition.js").ToolDefinition;
13
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/tools/connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyUH,eAAO,MAAM,mBAAmB,8CA4B9B,CAAC;AAEH,eAAO,MAAM,qBAAqB,8CAuBhC,CAAC;AAEH,eAAO,MAAM,sBAAsB,8CAajC,CAAC;AAEH,eAAO,MAAM,uBAAuB,8CAuBlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,8CAuB7B,CAAC"}