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
@@ -0,0 +1,250 @@
1
+ /**
2
+ * 共享类型定义
3
+ * 从 src/tools.ts 提取的所有接口和类型
4
+ */
5
+ /**
6
+ * 连接选项接口
7
+ */
8
+ export interface ConnectOptions {
9
+ projectPath: string;
10
+ cliPath?: string;
11
+ port?: number;
12
+ autoAudits?: boolean;
13
+ }
14
+ /**
15
+ * 增强的连接选项接口
16
+ */
17
+ export interface EnhancedConnectOptions extends ConnectOptions {
18
+ mode?: 'auto' | 'launch' | 'connect';
19
+ autoPort?: number;
20
+ autoAccount?: string;
21
+ timeout?: number;
22
+ fallbackMode?: boolean;
23
+ healthCheck?: boolean;
24
+ verbose?: boolean;
25
+ }
26
+ /**
27
+ * 连接结果接口
28
+ */
29
+ export interface ConnectResult {
30
+ miniProgram: any;
31
+ currentPage: any;
32
+ pagePath: string;
33
+ }
34
+ /**
35
+ * 启动结果接口
36
+ */
37
+ export interface StartupResult {
38
+ processInfo: {
39
+ pid: number;
40
+ port: number;
41
+ };
42
+ startTime: number;
43
+ }
44
+ /**
45
+ * 详细连接结果接口
46
+ */
47
+ export interface DetailedConnectResult extends ConnectResult {
48
+ connectionMode: 'launch' | 'connect';
49
+ startupTime: number;
50
+ healthStatus: 'healthy' | 'degraded' | 'unhealthy';
51
+ processInfo?: {
52
+ pid: number;
53
+ port: number;
54
+ };
55
+ }
56
+ /**
57
+ * 元素快照接口
58
+ */
59
+ export interface ElementSnapshot {
60
+ uid: string;
61
+ tagName: string;
62
+ text?: string;
63
+ attributes?: Record<string, string>;
64
+ position?: {
65
+ left: number;
66
+ top: number;
67
+ width: number;
68
+ height: number;
69
+ };
70
+ }
71
+ /**
72
+ * 页面快照接口
73
+ */
74
+ export interface PageSnapshot {
75
+ path: string;
76
+ elements: ElementSnapshot[];
77
+ }
78
+ /**
79
+ * 元素映射信息接口
80
+ * 用于精确定位页面元素
81
+ */
82
+ export interface ElementMapInfo {
83
+ selector: string;
84
+ index: number;
85
+ }
86
+ /**
87
+ * 点击元素选项接口
88
+ */
89
+ export interface ClickOptions {
90
+ uid: string;
91
+ dblClick?: boolean;
92
+ }
93
+ /**
94
+ * 截图选项接口
95
+ */
96
+ export interface ScreenshotOptions {
97
+ path?: string;
98
+ }
99
+ /**
100
+ * 查询结果接口
101
+ */
102
+ export interface QueryResult {
103
+ uid: string;
104
+ tagName: string;
105
+ text?: string;
106
+ attributes?: Record<string, string>;
107
+ position?: {
108
+ left: number;
109
+ top: number;
110
+ width: number;
111
+ height: number;
112
+ };
113
+ }
114
+ /**
115
+ * 查询元素选项接口
116
+ */
117
+ export interface QueryOptions {
118
+ selector: string;
119
+ }
120
+ /**
121
+ * 等待条件接口
122
+ */
123
+ export interface WaitForOptions {
124
+ selector?: string;
125
+ timeout?: number;
126
+ text?: string;
127
+ visible?: boolean;
128
+ disappear?: boolean;
129
+ }
130
+ /**
131
+ * 文本输入选项接口
132
+ */
133
+ export interface InputTextOptions {
134
+ uid: string;
135
+ text: string;
136
+ clear?: boolean;
137
+ append?: boolean;
138
+ }
139
+ /**
140
+ * 表单控件选项接口
141
+ */
142
+ export interface FormControlOptions {
143
+ uid: string;
144
+ value: any;
145
+ trigger?: string;
146
+ }
147
+ /**
148
+ * 获取值选项接口
149
+ */
150
+ export interface GetValueOptions {
151
+ uid: string;
152
+ attribute?: string;
153
+ }
154
+ /**
155
+ * 断言结果接口
156
+ */
157
+ export interface AssertResult {
158
+ passed: boolean;
159
+ message: string;
160
+ actual: any;
161
+ expected: any;
162
+ timestamp: number;
163
+ }
164
+ /**
165
+ * 元素存在性断言选项接口
166
+ */
167
+ export interface ExistenceAssertOptions {
168
+ selector?: string;
169
+ uid?: string;
170
+ timeout?: number;
171
+ shouldExist: boolean;
172
+ }
173
+ /**
174
+ * 元素状态断言选项接口
175
+ */
176
+ export interface StateAssertOptions {
177
+ uid: string;
178
+ visible?: boolean;
179
+ enabled?: boolean;
180
+ checked?: boolean;
181
+ focused?: boolean;
182
+ }
183
+ /**
184
+ * 内容断言选项接口
185
+ */
186
+ export interface ContentAssertOptions {
187
+ uid: string;
188
+ text?: string;
189
+ textContains?: string;
190
+ textMatches?: string;
191
+ attribute?: {
192
+ key: string;
193
+ value: string;
194
+ };
195
+ }
196
+ /**
197
+ * 页面导航选项接口
198
+ */
199
+ export interface NavigateOptions {
200
+ url: string;
201
+ params?: Record<string, any>;
202
+ waitForLoad?: boolean;
203
+ timeout?: number;
204
+ }
205
+ /**
206
+ * 返回导航选项接口
207
+ */
208
+ export interface NavigateBackOptions {
209
+ delta?: number;
210
+ waitForLoad?: boolean;
211
+ timeout?: number;
212
+ }
213
+ /**
214
+ * Tab切换选项接口
215
+ */
216
+ export interface SwitchTabOptions {
217
+ url: string;
218
+ index?: number;
219
+ waitForLoad?: boolean;
220
+ timeout?: number;
221
+ }
222
+ /**
223
+ * 页面状态接口
224
+ */
225
+ export interface PageStateOptions {
226
+ expectPath?: string;
227
+ expectTitle?: string;
228
+ }
229
+ /**
230
+ * 页面信息接口
231
+ */
232
+ export interface PageInfo {
233
+ path: string;
234
+ title?: string;
235
+ query?: Record<string, any>;
236
+ }
237
+ /**
238
+ * automator.launch 选项接口
239
+ */
240
+ export interface AutomatorLaunchOptions {
241
+ projectPath: string;
242
+ cliPath?: string;
243
+ port?: number;
244
+ projectConfig?: {
245
+ setting?: {
246
+ autoAudits?: boolean;
247
+ };
248
+ };
249
+ }
250
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 共享类型定义
3
+ * 从 src/tools.ts 提取的所有接口和类型
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Console 消息格式化器
3
+ * 参考 chrome-devtools-mcp 的设计模式
4
+ */
5
+ /**
6
+ * 可过滤的 Console 消息类型(扩展到15+种)
7
+ */
8
+ export declare const FILTERABLE_MESSAGE_TYPES: readonly ["log", "debug", "info", "error", "warn", "dir", "dirxml", "table", "trace", "clear", "group", "groupCollapsed", "groupEnd", "assert", "count", "timeEnd", "verbose"];
9
+ export type ConsoleMessageType = typeof FILTERABLE_MESSAGE_TYPES[number];
10
+ /**
11
+ * Console 消息数据接口(用于格式化)
12
+ */
13
+ export interface ConsoleMessageData {
14
+ msgid: number;
15
+ type: string;
16
+ message?: string;
17
+ args?: any[];
18
+ timestamp?: string;
19
+ source?: string;
20
+ }
21
+ /**
22
+ * Exception 消息数据接口(用于格式化)
23
+ */
24
+ export interface ExceptionMessageData {
25
+ msgid: number;
26
+ type: 'exception';
27
+ message: string;
28
+ stack?: string;
29
+ timestamp?: string;
30
+ source?: string;
31
+ }
32
+ /**
33
+ * 简短格式化 Console 消息(用于列表视图)
34
+ * 格式:msgid=123 [error] Network timeout (2 args)
35
+ */
36
+ export declare function formatConsoleEventShort(data: ConsoleMessageData | ExceptionMessageData): string;
37
+ /**
38
+ * 详细格式化 Console 消息(用于详情视图)
39
+ * 包含完整的参数信息和堆栈跟踪
40
+ */
41
+ export declare function formatConsoleEventVerbose(data: ConsoleMessageData | ExceptionMessageData): string;
42
+ /**
43
+ * 格式化分页信息
44
+ */
45
+ export declare function formatPaginationInfo(total: number, pageSize: number, pageIdx: number): {
46
+ info: string[];
47
+ hasNextPage: boolean;
48
+ hasPreviousPage: boolean;
49
+ };
50
+ //# sourceMappingURL=consoleFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consoleFormatter.d.ts","sourceRoot":"","sources":["../../src/formatters/consoleFormatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB,gLAkB3B,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuCD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,GAC9C,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,GAC9C,MAAM,CA4BR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IACD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAoBA"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Console 消息格式化器
3
+ * 参考 chrome-devtools-mcp 的设计模式
4
+ */
5
+ /**
6
+ * 可过滤的 Console 消息类型(扩展到15+种)
7
+ */
8
+ export const FILTERABLE_MESSAGE_TYPES = [
9
+ 'log',
10
+ 'debug',
11
+ 'info',
12
+ 'error',
13
+ 'warn',
14
+ 'dir',
15
+ 'dirxml',
16
+ 'table',
17
+ 'trace',
18
+ 'clear',
19
+ 'group',
20
+ 'groupCollapsed',
21
+ 'groupEnd',
22
+ 'assert',
23
+ 'count',
24
+ 'timeEnd',
25
+ 'verbose',
26
+ ];
27
+ /**
28
+ * 格式化单个参数
29
+ */
30
+ function formatArg(arg) {
31
+ if (typeof arg === 'object' && arg !== null) {
32
+ try {
33
+ return JSON.stringify(arg);
34
+ }
35
+ catch {
36
+ return String(arg);
37
+ }
38
+ }
39
+ return String(arg);
40
+ }
41
+ /**
42
+ * 格式化参数列表
43
+ */
44
+ function formatArgs(data) {
45
+ if (data.type === 'exception') {
46
+ return '';
47
+ }
48
+ // 类型收窄:此时 data 是 ConsoleMessageData
49
+ const consoleData = data;
50
+ if (!consoleData.args || consoleData.args.length === 0) {
51
+ return '';
52
+ }
53
+ const result = ['### Arguments'];
54
+ for (const [key, arg] of consoleData.args.entries()) {
55
+ result.push(`Arg #${key}: ${formatArg(arg)}`);
56
+ }
57
+ return result.join('\n');
58
+ }
59
+ /**
60
+ * 简短格式化 Console 消息(用于列表视图)
61
+ * 格式:msgid=123 [error] Network timeout (2 args)
62
+ */
63
+ export function formatConsoleEventShort(data) {
64
+ const argsCount = data.type === 'exception' ? 0 : (data.args?.length ?? 0);
65
+ const message = data.message || '';
66
+ return `msgid=${data.msgid} [${data.type}] ${message} (${argsCount} args)`;
67
+ }
68
+ /**
69
+ * 详细格式化 Console 消息(用于详情视图)
70
+ * 包含完整的参数信息和堆栈跟踪
71
+ */
72
+ export function formatConsoleEventVerbose(data) {
73
+ const lines = [
74
+ `ID: ${data.msgid}`,
75
+ `Type: ${data.type}`,
76
+ `Timestamp: ${data.timestamp || 'N/A'}`,
77
+ ];
78
+ if (data.source) {
79
+ lines.push(`Source: ${data.source}`);
80
+ }
81
+ if (data.message) {
82
+ lines.push(`Message: ${data.message}`);
83
+ }
84
+ // Exception 专属:堆栈跟踪
85
+ if (data.type === 'exception' && 'stack' in data && data.stack) {
86
+ lines.push('### Stack Trace');
87
+ lines.push(data.stack);
88
+ }
89
+ // Console 专属:参数列表
90
+ const argsFormatted = formatArgs(data);
91
+ if (argsFormatted) {
92
+ lines.push(argsFormatted);
93
+ }
94
+ return lines.join('\n');
95
+ }
96
+ /**
97
+ * 格式化分页信息
98
+ */
99
+ export function formatPaginationInfo(total, pageSize, pageIdx) {
100
+ const start = pageIdx * pageSize;
101
+ const end = Math.min(start + pageSize, total);
102
+ const hasNextPage = end < total;
103
+ const hasPreviousPage = pageIdx > 0;
104
+ const info = [
105
+ `Total: ${total} messages`,
106
+ `Showing: ${start + 1}-${end}`,
107
+ ];
108
+ if (hasNextPage) {
109
+ info.push(`Next page: ${pageIdx + 1}`);
110
+ }
111
+ if (hasPreviousPage) {
112
+ info.push(`Previous page: ${pageIdx - 1}`);
113
+ }
114
+ return { info, hasNextPage, hasPreviousPage };
115
+ }
116
+ //# sourceMappingURL=consoleFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consoleFormatter.js","sourceRoot":"","sources":["../../src/formatters/consoleFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 页面快照格式化器
3
+ * 提供多种输出格式以优化token使用和可读性
4
+ */
5
+ import type { PageSnapshot } from '../tools.js';
6
+ /**
7
+ * 输出格式类型
8
+ */
9
+ export type SnapshotFormat = 'compact' | 'minimal' | 'json';
10
+ /**
11
+ * 格式化配置选项
12
+ */
13
+ export interface FormatOptions {
14
+ /** 输出格式 */
15
+ format: SnapshotFormat;
16
+ /** 是否包含位置信息 */
17
+ includePosition?: boolean;
18
+ /** 是否包含属性信息 */
19
+ includeAttributes?: boolean;
20
+ /** 最大元素数量限制 */
21
+ maxElements?: number;
22
+ }
23
+ /**
24
+ * 格式化页面快照
25
+ *
26
+ * @param snapshot 页面快照数据
27
+ * @param options 格式化选项
28
+ * @returns 格式化后的字符串
29
+ */
30
+ export declare function formatSnapshot(snapshot: PageSnapshot, options?: FormatOptions): string;
31
+ /**
32
+ * Token使用估算
33
+ *
34
+ * 提供各种格式的token消耗估算,帮助用户选择合适的格式
35
+ */
36
+ export declare function estimateTokens(snapshot: PageSnapshot): {
37
+ compact: number;
38
+ minimal: number;
39
+ json: number;
40
+ };
41
+ //# sourceMappingURL=snapshotFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshotFormatter.d.ts","sourceRoot":"","sources":["../../src/formatters/snapshotFormatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,aAAqC,GAC7C,MAAM,CAoBR;AA0ID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAWA"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * 页面快照格式化器
3
+ * 提供多种输出格式以优化token使用和可读性
4
+ */
5
+ /**
6
+ * 格式化页面快照
7
+ *
8
+ * @param snapshot 页面快照数据
9
+ * @param options 格式化选项
10
+ * @returns 格式化后的字符串
11
+ */
12
+ export function formatSnapshot(snapshot, options = { format: 'compact' }) {
13
+ const { format, maxElements } = options;
14
+ // 限制元素数量
15
+ const elements = maxElements
16
+ ? snapshot.elements.slice(0, maxElements)
17
+ : snapshot.elements;
18
+ const limitedSnapshot = { ...snapshot, elements };
19
+ switch (format) {
20
+ case 'compact':
21
+ return formatCompact(limitedSnapshot, options);
22
+ case 'minimal':
23
+ return formatMinimal(limitedSnapshot);
24
+ case 'json':
25
+ return formatJSON(limitedSnapshot, options);
26
+ default:
27
+ return formatCompact(limitedSnapshot, options);
28
+ }
29
+ }
30
+ /**
31
+ * 紧凑文本格式(类似chrome-devtools-mcp风格)
32
+ *
33
+ * 示例输出:
34
+ * # Page: pages/index/index
35
+ * # Elements: 5
36
+ *
37
+ * uid=view.container view "Welcome" pos=[0,64] size=[375x667]
38
+ * uid=button.submit button "Submit" pos=[100,400] size=[175x44]
39
+ */
40
+ function formatCompact(snapshot, options) {
41
+ const lines = [];
42
+ const { includePosition = true, includeAttributes = false } = options;
43
+ // 头部信息
44
+ lines.push(`# Page: ${snapshot.path}`);
45
+ lines.push(`# Elements: ${snapshot.elements.length}`);
46
+ lines.push('');
47
+ // 元素信息
48
+ for (const element of snapshot.elements) {
49
+ const parts = [];
50
+ // 必需字段:uid tagName
51
+ parts.push(`uid=${element.uid}`);
52
+ parts.push(element.tagName);
53
+ // 文本内容(引号包裹,转义特殊字符)
54
+ if (element.text) {
55
+ const escapedText = escapeText(element.text);
56
+ parts.push(`"${escapedText}"`);
57
+ }
58
+ // 位置信息(紧凑格式)
59
+ if (includePosition && element.position) {
60
+ const { left, top, width, height } = element.position;
61
+ parts.push(`pos=[${left},${top}]`);
62
+ parts.push(`size=[${width}x${height}]`);
63
+ }
64
+ // 属性信息(可选,键值对格式)
65
+ if (includeAttributes && element.attributes) {
66
+ const attrPairs = Object.entries(element.attributes)
67
+ .map(([key, value]) => `${key}="${value}"`)
68
+ .join(' ');
69
+ if (attrPairs) {
70
+ parts.push(attrPairs);
71
+ }
72
+ }
73
+ lines.push(parts.join(' '));
74
+ }
75
+ return lines.join('\n');
76
+ }
77
+ /**
78
+ * 最小化格式(仅保留核心识别信息)
79
+ *
80
+ * 示例输出:
81
+ * # Page: pages/index/index
82
+ * # Elements: 5
83
+ *
84
+ * view.container view
85
+ * button.submit button "Submit"
86
+ * input#username input
87
+ */
88
+ function formatMinimal(snapshot) {
89
+ const lines = [];
90
+ // 头部信息
91
+ lines.push(`# Page: ${snapshot.path}`);
92
+ lines.push(`# Elements: ${snapshot.elements.length}`);
93
+ lines.push('');
94
+ // 元素信息(只有uid、tagName、text)
95
+ for (const element of snapshot.elements) {
96
+ const parts = [element.uid, element.tagName];
97
+ if (element.text) {
98
+ const escapedText = escapeText(element.text);
99
+ parts.push(`"${escapedText}"`);
100
+ }
101
+ lines.push(parts.join(' '));
102
+ }
103
+ return lines.join('\n');
104
+ }
105
+ /**
106
+ * JSON格式(保留完整信息)
107
+ *
108
+ * 保持向后兼容性,输出完整的JSON结构
109
+ */
110
+ function formatJSON(snapshot, options) {
111
+ const { includePosition = true, includeAttributes = false } = options;
112
+ // 根据选项过滤字段
113
+ const filteredElements = snapshot.elements.map(element => {
114
+ const filtered = {
115
+ uid: element.uid,
116
+ tagName: element.tagName,
117
+ };
118
+ if (element.text)
119
+ filtered.text = element.text;
120
+ if (includePosition && element.position)
121
+ filtered.position = element.position;
122
+ if (includeAttributes && element.attributes)
123
+ filtered.attributes = element.attributes;
124
+ return filtered;
125
+ });
126
+ return JSON.stringify({ path: snapshot.path, elements: filteredElements }, null, 2);
127
+ }
128
+ /**
129
+ * 转义文本内容中的特殊字符
130
+ */
131
+ function escapeText(text) {
132
+ return text
133
+ .replace(/\\/g, '\\\\') // 反斜杠
134
+ .replace(/"/g, '\\"') // 双引号
135
+ .replace(/\n/g, '\\n') // 换行符
136
+ .replace(/\r/g, '\\r') // 回车符
137
+ .replace(/\t/g, '\\t') // 制表符
138
+ .slice(0, 100); // 限制长度,避免超长文本
139
+ }
140
+ /**
141
+ * Token使用估算
142
+ *
143
+ * 提供各种格式的token消耗估算,帮助用户选择合适的格式
144
+ */
145
+ export function estimateTokens(snapshot) {
146
+ // 粗略估算:1 token ≈ 4 characters
147
+ const compactStr = formatCompact(snapshot, { format: 'compact' });
148
+ const minimalStr = formatMinimal(snapshot);
149
+ const jsonStr = formatJSON(snapshot, { format: 'json' });
150
+ return {
151
+ compact: Math.ceil(compactStr.length / 4),
152
+ minimal: Math.ceil(minimalStr.length / 4),
153
+ json: Math.ceil(jsonStr.length / 4),
154
+ };
155
+ }
156
+ //# sourceMappingURL=snapshotFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshotFormatter.js","sourceRoot":"","sources":["../../src/formatters/snapshotFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 微信开发者工具自动化 MCP 服务器
4
+ * 提供微信小程序自动化测试功能,包括:
5
+ * - 连接微信开发者工具
6
+ * - 获取页面快照和元素信息
7
+ * - 点击页面元素
8
+ * - 其他自动化操作
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}