weixin-devtools-mcp 0.0.1 → 0.1.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 (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -114
  3. package/build/MiniProgramContext.d.ts +307 -0
  4. package/build/MiniProgramContext.d.ts.map +1 -0
  5. package/build/MiniProgramContext.js +650 -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 +198 -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 +96 -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/formatters/consoleFormatter.d.ts +50 -0
  56. package/build/formatters/consoleFormatter.d.ts.map +1 -0
  57. package/build/formatters/consoleFormatter.js +116 -0
  58. package/build/formatters/consoleFormatter.js.map +1 -0
  59. package/build/formatters/snapshotFormatter.d.ts +41 -0
  60. package/build/formatters/snapshotFormatter.d.ts.map +1 -0
  61. package/build/formatters/snapshotFormatter.js +156 -0
  62. package/build/formatters/snapshotFormatter.js.map +1 -0
  63. package/build/index.d.ts +11 -0
  64. package/build/index.d.ts.map +1 -0
  65. package/build/index.js +45 -9
  66. package/build/index.js.map +1 -0
  67. package/build/server.d.ts +7 -0
  68. package/build/server.d.ts.map +1 -0
  69. package/build/server.js +70 -30
  70. package/build/server.js.map +1 -0
  71. package/build/tools/ToolDefinition.d.ts +215 -0
  72. package/build/tools/ToolDefinition.d.ts.map +1 -0
  73. package/build/tools/ToolDefinition.js +9 -7
  74. package/build/tools/ToolDefinition.js.map +1 -0
  75. package/build/tools/assert.d.ts +17 -0
  76. package/build/tools/assert.d.ts.map +1 -0
  77. package/build/tools/assert.js +8 -88
  78. package/build/tools/assert.js.map +1 -0
  79. package/build/tools/connection.d.ts +13 -0
  80. package/build/tools/connection.d.ts.map +1 -0
  81. package/build/tools/connection.js +332 -615
  82. package/build/tools/connection.js.map +1 -0
  83. package/build/tools/console.d.ts +20 -0
  84. package/build/tools/console.d.ts.map +1 -0
  85. package/build/tools/console.js +162 -152
  86. package/build/tools/console.js.map +1 -0
  87. package/build/tools/diagnose.d.ts +22 -0
  88. package/build/tools/diagnose.d.ts.map +1 -0
  89. package/build/tools/diagnose.js +400 -13
  90. package/build/tools/diagnose.js.map +1 -0
  91. package/build/tools/index.d.ts +6 -0
  92. package/build/tools/index.d.ts.map +1 -0
  93. package/build/tools/index.js +3 -77
  94. package/build/tools/index.js.map +1 -0
  95. package/build/tools/input.d.ts +21 -0
  96. package/build/tools/input.d.ts.map +1 -0
  97. package/build/tools/input.js +73 -139
  98. package/build/tools/input.js.map +1 -0
  99. package/build/tools/navigate.d.ts +21 -0
  100. package/build/tools/navigate.d.ts.map +1 -0
  101. package/build/tools/navigate.js +63 -126
  102. package/build/tools/navigate.js.map +1 -0
  103. package/build/tools/network.d.ts +17 -0
  104. package/build/tools/network.d.ts.map +1 -0
  105. package/build/tools/network.js +75 -887
  106. package/build/tools/network.js.map +1 -0
  107. package/build/tools/page.d.ts +13 -0
  108. package/build/tools/page.d.ts.map +1 -0
  109. package/build/tools/page.js +4 -1
  110. package/build/tools/page.js.map +1 -0
  111. package/build/tools/screenshot.d.ts +9 -0
  112. package/build/tools/screenshot.d.ts.map +1 -0
  113. package/build/tools/screenshot.js +3 -1
  114. package/build/tools/screenshot.js.map +1 -0
  115. package/build/tools/script.d.ts +6 -0
  116. package/build/tools/script.d.ts.map +1 -0
  117. package/build/tools/script.js +92 -0
  118. package/build/tools/script.js.map +1 -0
  119. package/build/tools/snapshot.d.ts +9 -0
  120. package/build/tools/snapshot.d.ts.map +1 -0
  121. package/build/tools/snapshot.js +78 -12
  122. package/build/tools/snapshot.js.map +1 -0
  123. package/build/tools/tools.d.ts +15 -0
  124. package/build/tools/tools.d.ts.map +1 -0
  125. package/build/tools/tools.js +62 -0
  126. package/build/tools/tools.js.map +1 -0
  127. package/build/tools.d.ts +431 -0
  128. package/build/tools.d.ts.map +1 -0
  129. package/build/tools.js +235 -117
  130. package/build/tools.js.map +1 -0
  131. package/build/types/errors.d.ts +189 -0
  132. package/build/types/errors.d.ts.map +1 -0
  133. package/build/types/errors.js +257 -0
  134. package/build/types/errors.js.map +1 -0
  135. package/build/utils/idGenerator.d.ts +21 -0
  136. package/build/utils/idGenerator.d.ts.map +1 -0
  137. package/build/utils/idGenerator.js +23 -0
  138. package/build/utils/idGenerator.js.map +1 -0
  139. package/package.json +34 -10
@@ -0,0 +1,167 @@
1
+ /**
2
+ * NetworkCollector - 网络请求收集器
3
+ *
4
+ * 专门用于收集和管理网络请求
5
+ * 继承自通用 Collector 基类
6
+ */
7
+ import { Collector, type CollectorOptions, type QueryOptions } from './Collector.js';
8
+ /**
9
+ * 网络请求类型
10
+ */
11
+ export type NetworkRequestType = 'request' | 'uploadFile' | 'downloadFile';
12
+ /**
13
+ * 网络请求信息接口
14
+ */
15
+ export interface NetworkRequest {
16
+ /** 请求 ID(由应用层分配) */
17
+ id: string;
18
+ /** 请求类型 */
19
+ type: NetworkRequestType;
20
+ /** 请求 URL */
21
+ url: string;
22
+ /** HTTP 方法 */
23
+ method?: string;
24
+ /** 请求头 */
25
+ headers?: Record<string, string>;
26
+ /** 请求体数据 */
27
+ data?: unknown;
28
+ /** 查询参数(Mpx 框架等) */
29
+ params?: Record<string, unknown>;
30
+ /** 响应状态码 */
31
+ statusCode?: number;
32
+ /** 响应数据 */
33
+ response?: unknown;
34
+ /** 响应头 */
35
+ responseHeaders?: Record<string, string>;
36
+ /** 错误信息 */
37
+ error?: string;
38
+ /** 请求耗时(毫秒) */
39
+ duration?: number;
40
+ /** 请求开始时间 */
41
+ timestamp: string;
42
+ /** 请求完成时间 */
43
+ completedAt?: string;
44
+ /** 是否成功 */
45
+ success: boolean;
46
+ /** 是否等待响应中 */
47
+ pending?: boolean;
48
+ /** 请求来源 */
49
+ source?: string;
50
+ }
51
+ /**
52
+ * 网络请求查询选项
53
+ */
54
+ export interface NetworkQueryOptions extends QueryOptions<NetworkRequest> {
55
+ /** 请求类型过滤 */
56
+ type?: NetworkRequestType | 'all';
57
+ /** URL 匹配模式(正则表达式) */
58
+ urlPattern?: string;
59
+ /** 仅返回成功的请求 */
60
+ successOnly?: boolean;
61
+ /** 仅返回失败的请求 */
62
+ failedOnly?: boolean;
63
+ /** 仅返回已完成的请求 */
64
+ completedOnly?: boolean;
65
+ /** 指定时间之后的请求(ISO 8601 格式) */
66
+ since?: string;
67
+ }
68
+ /**
69
+ * wx 网络方法类型(用于存储原始方法以便恢复)
70
+ */
71
+ export type WxNetworkMethod = ((options: Record<string, unknown>) => unknown) | undefined;
72
+ /**
73
+ * 原始方法存储
74
+ */
75
+ export interface OriginalMethods {
76
+ request?: WxNetworkMethod;
77
+ uploadFile?: WxNetworkMethod;
78
+ downloadFile?: WxNetworkMethod;
79
+ }
80
+ /**
81
+ * 网络请求收集器
82
+ */
83
+ export declare class NetworkCollector extends Collector<NetworkRequest> {
84
+ #private;
85
+ constructor(options?: CollectorOptions);
86
+ /**
87
+ * 设置 MiniProgram 引用(用于远程同步)
88
+ */
89
+ setMiniProgram(miniProgram: {
90
+ evaluate: (fn: () => unknown) => Promise<unknown>;
91
+ } | null): void;
92
+ /**
93
+ * 从远程同步数据(带节流)
94
+ * @param force 是否强制同步(跳过节流)
95
+ * @returns 同步的请求数量
96
+ */
97
+ syncFromRemote(force?: boolean): Promise<number>;
98
+ /**
99
+ * 设置同步间隔
100
+ */
101
+ setSyncInterval(intervalMs: number): void;
102
+ /**
103
+ * 设置原始方法(用于恢复)
104
+ */
105
+ setOriginalMethods(methods: OriginalMethods): void;
106
+ /**
107
+ * 获取原始方法
108
+ */
109
+ getOriginalMethods(): OriginalMethods;
110
+ /**
111
+ * 清除原始方法引用
112
+ */
113
+ clearOriginalMethods(): void;
114
+ /**
115
+ * 添加网络请求
116
+ * @returns Stable ID
117
+ */
118
+ addRequest(request: NetworkRequest): number;
119
+ /**
120
+ * 更新请求状态(当响应到达时)
121
+ */
122
+ updateRequest(id: string, updates: Partial<Pick<NetworkRequest, 'statusCode' | 'response' | 'responseHeaders' | 'error' | 'duration' | 'completedAt' | 'success' | 'pending'>>): boolean;
123
+ /**
124
+ * 标记请求完成
125
+ */
126
+ completeRequest(id: string, response: {
127
+ statusCode?: number;
128
+ data?: unknown;
129
+ headers?: Record<string, string>;
130
+ error?: string;
131
+ }): boolean;
132
+ /**
133
+ * 获取网络请求(支持多种过滤条件)
134
+ */
135
+ getRequests(options?: NetworkQueryOptions): NetworkRequest[];
136
+ /**
137
+ * 通过请求 ID 获取请求
138
+ */
139
+ getRequestById(id: string): NetworkRequest | undefined;
140
+ /**
141
+ * 获取待处理的请求
142
+ */
143
+ getPendingRequests(): NetworkRequest[];
144
+ /**
145
+ * 获取失败的请求
146
+ */
147
+ getFailedRequests(): NetworkRequest[];
148
+ /**
149
+ * 获取请求统计
150
+ */
151
+ getStats(): {
152
+ total: number;
153
+ pending: number;
154
+ success: number;
155
+ failed: number;
156
+ byType: Record<NetworkRequestType, number>;
157
+ };
158
+ /**
159
+ * 获取平均响应时间(毫秒)
160
+ */
161
+ getAverageResponseTime(): number;
162
+ /**
163
+ * 完全重置(包括原始方法引用)
164
+ */
165
+ reset(): void;
166
+ }
167
+ //# sourceMappingURL=NetworkCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkCollector.d.ts","sourceRoot":"","sources":["../../src/collectors/NetworkCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * NetworkCollector - 网络请求收集器
3
+ *
4
+ * 专门用于收集和管理网络请求
5
+ * 继承自通用 Collector 基类
6
+ */
7
+ import { Collector } from './Collector.js';
8
+ /**
9
+ * 网络请求收集器
10
+ */
11
+ export class NetworkCollector extends Collector {
12
+ /** 存储原始的 wx 网络方法 */
13
+ #originalMethods = {};
14
+ /** 上次同步时间戳 */
15
+ #lastSyncTimestamp = 0;
16
+ /** 同步间隔(毫秒) */
17
+ #syncIntervalMs = 5000;
18
+ /** MiniProgram 引用(用于同步) */
19
+ #miniProgram = null;
20
+ constructor(options) {
21
+ super(options);
22
+ }
23
+ // ============ MiniProgram 引用管理 ============
24
+ /**
25
+ * 设置 MiniProgram 引用(用于远程同步)
26
+ */
27
+ setMiniProgram(miniProgram) {
28
+ this.#miniProgram = miniProgram;
29
+ }
30
+ /**
31
+ * 从远程同步数据(带节流)
32
+ * @param force 是否强制同步(跳过节流)
33
+ * @returns 同步的请求数量
34
+ */
35
+ async syncFromRemote(force = false) {
36
+ const now = Date.now();
37
+ // 节流:非强制且未到同步时间
38
+ if (!force && now - this.#lastSyncTimestamp < this.#syncIntervalMs) {
39
+ return 0;
40
+ }
41
+ if (!this.#miniProgram) {
42
+ return 0;
43
+ }
44
+ try {
45
+ // 从小程序环境拉取并清空远程日志
46
+ const remoteLogs = await this.#miniProgram.evaluate(function () {
47
+ // @ts-ignore
48
+ const wxObj = typeof wx !== 'undefined' ? wx : null;
49
+ if (!wxObj || !wxObj.__networkLogs)
50
+ return [];
51
+ // 返回并清空(避免重复处理)
52
+ // @ts-ignore
53
+ const logs = [...wxObj.__networkLogs];
54
+ // @ts-ignore
55
+ wxObj.__networkLogs = [];
56
+ return logs;
57
+ });
58
+ this.#lastSyncTimestamp = now;
59
+ // 批量添加到本地存储
60
+ let addedCount = 0;
61
+ for (const log of remoteLogs) {
62
+ if (log && typeof log === 'object' && log.url) {
63
+ this.addRequest(log);
64
+ addedCount++;
65
+ }
66
+ }
67
+ return addedCount;
68
+ }
69
+ catch (error) {
70
+ console.warn('[NetworkCollector] 同步失败:', error);
71
+ return 0;
72
+ }
73
+ }
74
+ /**
75
+ * 设置同步间隔
76
+ */
77
+ setSyncInterval(intervalMs) {
78
+ this.#syncIntervalMs = Math.max(1000, intervalMs); // 最少 1 秒
79
+ }
80
+ // ============ 原始方法管理 ============
81
+ /**
82
+ * 设置原始方法(用于恢复)
83
+ */
84
+ setOriginalMethods(methods) {
85
+ this.#originalMethods = { ...methods };
86
+ }
87
+ /**
88
+ * 获取原始方法
89
+ */
90
+ getOriginalMethods() {
91
+ return { ...this.#originalMethods };
92
+ }
93
+ /**
94
+ * 清除原始方法引用
95
+ */
96
+ clearOriginalMethods() {
97
+ this.#originalMethods = {};
98
+ }
99
+ // ============ 请求收集 ============
100
+ /**
101
+ * 添加网络请求
102
+ * @returns Stable ID
103
+ */
104
+ addRequest(request) {
105
+ return this.collect(request);
106
+ }
107
+ /**
108
+ * 更新请求状态(当响应到达时)
109
+ */
110
+ updateRequest(id, updates) {
111
+ const request = this.find(req => req.id === id);
112
+ if (request) {
113
+ Object.assign(request, updates);
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ /**
119
+ * 标记请求完成
120
+ */
121
+ completeRequest(id, response) {
122
+ const request = this.find(req => req.id === id);
123
+ if (!request) {
124
+ return false;
125
+ }
126
+ const now = new Date().toISOString();
127
+ const startTime = new Date(request.timestamp).getTime();
128
+ const endTime = new Date(now).getTime();
129
+ request.statusCode = response.statusCode;
130
+ request.response = response.data;
131
+ request.responseHeaders = response.headers;
132
+ request.error = response.error;
133
+ request.duration = endTime - startTime;
134
+ request.completedAt = now;
135
+ request.success = !response.error && (response.statusCode === undefined || (response.statusCode >= 200 && response.statusCode < 400));
136
+ request.pending = false;
137
+ return true;
138
+ }
139
+ // ============ 请求查询 ============
140
+ /**
141
+ * 获取网络请求(支持多种过滤条件)
142
+ */
143
+ getRequests(options = {}) {
144
+ const { type = 'all', urlPattern, successOnly, failedOnly, completedOnly, since, ...baseOptions } = options;
145
+ // 构建复合过滤函数
146
+ const originalFilter = baseOptions.filter;
147
+ const filter = (request) => {
148
+ // 类型过滤
149
+ if (type !== 'all' && request.type !== type) {
150
+ return false;
151
+ }
152
+ // URL 模式过滤
153
+ if (urlPattern) {
154
+ try {
155
+ const regex = new RegExp(urlPattern);
156
+ if (!regex.test(request.url)) {
157
+ return false;
158
+ }
159
+ }
160
+ catch {
161
+ // 正则表达式无效,作为普通字符串匹配
162
+ if (!request.url.includes(urlPattern)) {
163
+ return false;
164
+ }
165
+ }
166
+ }
167
+ // 成功/失败过滤
168
+ if (successOnly && !request.success) {
169
+ return false;
170
+ }
171
+ if (failedOnly && request.success) {
172
+ return false;
173
+ }
174
+ // 完成状态过滤
175
+ if (completedOnly && request.pending) {
176
+ return false;
177
+ }
178
+ // 时间过滤
179
+ if (since) {
180
+ const sinceTime = new Date(since).getTime();
181
+ const requestTime = new Date(request.timestamp).getTime();
182
+ if (requestTime < sinceTime) {
183
+ return false;
184
+ }
185
+ }
186
+ // 应用原始过滤器
187
+ if (originalFilter && !originalFilter(request)) {
188
+ return false;
189
+ }
190
+ return true;
191
+ };
192
+ return this.getData({ ...baseOptions, filter });
193
+ }
194
+ /**
195
+ * 通过请求 ID 获取请求
196
+ */
197
+ getRequestById(id) {
198
+ return this.find(req => req.id === id);
199
+ }
200
+ /**
201
+ * 获取待处理的请求
202
+ */
203
+ getPendingRequests() {
204
+ return this.findAll(req => req.pending === true);
205
+ }
206
+ /**
207
+ * 获取失败的请求
208
+ */
209
+ getFailedRequests() {
210
+ return this.findAll(req => !req.success && !req.pending);
211
+ }
212
+ // ============ 统计信息 ============
213
+ /**
214
+ * 获取请求统计
215
+ */
216
+ getStats() {
217
+ const requests = this.getData({ includePreserved: false });
218
+ const stats = {
219
+ total: requests.length,
220
+ pending: 0,
221
+ success: 0,
222
+ failed: 0,
223
+ byType: {
224
+ request: 0,
225
+ uploadFile: 0,
226
+ downloadFile: 0,
227
+ },
228
+ };
229
+ for (const request of requests) {
230
+ stats.byType[request.type]++;
231
+ if (request.pending) {
232
+ stats.pending++;
233
+ }
234
+ else if (request.success) {
235
+ stats.success++;
236
+ }
237
+ else {
238
+ stats.failed++;
239
+ }
240
+ }
241
+ return stats;
242
+ }
243
+ /**
244
+ * 获取平均响应时间(毫秒)
245
+ */
246
+ getAverageResponseTime() {
247
+ const requests = this.getData({ includePreserved: false });
248
+ const completedRequests = requests.filter(req => req.duration !== undefined);
249
+ if (completedRequests.length === 0) {
250
+ return 0;
251
+ }
252
+ const totalTime = completedRequests.reduce((sum, req) => sum + (req.duration ?? 0), 0);
253
+ return Math.round(totalTime / completedRequests.length);
254
+ }
255
+ // ============ 重置 ============
256
+ /**
257
+ * 完全重置(包括原始方法引用)
258
+ */
259
+ reset() {
260
+ this.clear();
261
+ this.clearOriginalMethods();
262
+ this.stopMonitoring();
263
+ }
264
+ }
265
+ //# sourceMappingURL=NetworkCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkCollector.js","sourceRoot":"","sources":["../../src/collectors/NetworkCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Collectors 模块导出
3
+ *
4
+ * 提供通用的数据收集器模式:
5
+ * - Collector: 通用基类
6
+ * - ConsoleCollector: Console 消息收集
7
+ * - NetworkCollector: 网络请求收集
8
+ */
9
+ export { Collector, type CollectorOptions, type NavigationSession, type QueryOptions, } from './Collector.js';
10
+ export { ConsoleCollector, type ConsoleMessage, type ExceptionMessage, type ConsoleEntry, type ConsoleQueryOptions, isConsoleMessage, isExceptionMessage, } from './ConsoleCollector.js';
11
+ export { NetworkCollector, type NetworkRequest, type NetworkRequestType, type NetworkQueryOptions, type WxNetworkMethod, type OriginalMethods, } from './NetworkCollector.js';
12
+ export { createIdGenerator, stableIdSymbol, type WithStableId, } from '../utils/idGenerator.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,GAClB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Collectors 模块导出
3
+ *
4
+ * 提供通用的数据收集器模式:
5
+ * - Collector: 通用基类
6
+ * - ConsoleCollector: Console 消息收集
7
+ * - NetworkCollector: 网络请求收集
8
+ */
9
+ // 基类和通用类型
10
+ export { Collector, } from './Collector.js';
11
+ // Console 收集器
12
+ export { ConsoleCollector, isConsoleMessage, isExceptionMessage, } from './ConsoleCollector.js';
13
+ // Network 收集器
14
+ export { NetworkCollector, } from './NetworkCollector.js';
15
+ // ID 工具(重新导出)
16
+ export { createIdGenerator, stableIdSymbol, } from '../utils/idGenerator.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU;AACV,OAAO,EACL,SAAS,GAIV,MAAM,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EACL,gBAAgB,EAKhB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,cAAc;AACd,OAAO,EACL,gBAAgB,GAMjB,MAAM,uBAAuB,CAAC;AAE/B,cAAc;AACd,OAAO,EACL,iBAAiB,EACjB,cAAc,GAEf,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 工具暴露配置
3
+ * 支持 profile 与类别开关,按需裁剪 ListTools 返回内容
4
+ */
5
+ import type { ToolDefinition } from '../tools/ToolDefinition.js';
6
+ import { ToolCategory } from '../tools/ToolDefinition.js';
7
+ export type ToolsProfile = 'core' | 'full' | 'minimal';
8
+ export interface ToolProfileConfig {
9
+ profile: ToolsProfile;
10
+ enabledCategories: ReadonlySet<ToolCategory>;
11
+ disabledCategories: ReadonlySet<ToolCategory>;
12
+ }
13
+ export interface ToolActivationResult {
14
+ activeTools: ToolDefinition[];
15
+ disabledTools: Map<string, ToolDefinition>;
16
+ }
17
+ interface ParseConfigOptions {
18
+ argv?: readonly string[];
19
+ env?: NodeJS.ProcessEnv;
20
+ }
21
+ /**
22
+ * 解析工具 profile 配置
23
+ */
24
+ export declare function parseToolProfileConfig(options?: ParseConfigOptions): ToolProfileConfig;
25
+ /**
26
+ * 根据 profile 与类别开关计算激活工具
27
+ */
28
+ export declare function resolveToolsByProfile(tools: readonly ToolDefinition[], config: ToolProfileConfig): ToolActivationResult;
29
+ export {};
30
+ //# sourceMappingURL=tool-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-profile.d.ts","sourceRoot":"","sources":["../../src/config/tool-profile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,iBAAiB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAC7C,kBAAkB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAyCD,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAmDD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAqBtF;AAcD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,MAAM,EAAE,iBAAiB,GACxB,oBAAoB,CA6BtB"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * 工具暴露配置
3
+ * 支持 profile 与类别开关,按需裁剪 ListTools 返回内容
4
+ */
5
+ import { ToolCategory } from '../tools/ToolDefinition.js';
6
+ const DEFAULT_PROFILE = 'core';
7
+ const VALID_CATEGORIES = new Set(Object.values(ToolCategory));
8
+ const CORE_TOOL_NAMES = new Set([
9
+ 'connect_devtools',
10
+ 'reconnect_devtools',
11
+ 'disconnect_devtools',
12
+ 'get_connection_status',
13
+ 'get_current_page',
14
+ 'get_page_snapshot',
15
+ '$',
16
+ 'waitFor',
17
+ 'click',
18
+ 'input_text',
19
+ 'get_value',
20
+ 'set_form_control',
21
+ 'assert_text',
22
+ 'assert_attribute',
23
+ 'assert_state',
24
+ 'navigate_to',
25
+ 'navigate_back',
26
+ 'switch_tab',
27
+ 'relaunch',
28
+ 'evaluate_script',
29
+ ]);
30
+ const MINIMAL_TOOL_NAMES = new Set([
31
+ 'connect_devtools',
32
+ 'get_connection_status',
33
+ '$',
34
+ 'waitFor',
35
+ 'click',
36
+ 'input_text',
37
+ 'get_value',
38
+ 'navigate_to',
39
+ 'navigate_back',
40
+ 'assert_text',
41
+ ]);
42
+ function readCliOption(argv, optionName) {
43
+ const inlinePrefix = `--${optionName}=`;
44
+ for (let index = 0; index < argv.length; index += 1) {
45
+ const argument = argv[index];
46
+ if (argument.startsWith(inlinePrefix)) {
47
+ return argument.slice(inlinePrefix.length);
48
+ }
49
+ if (argument === `--${optionName}`) {
50
+ const next = argv[index + 1];
51
+ if (typeof next === 'string' && !next.startsWith('--')) {
52
+ return next;
53
+ }
54
+ }
55
+ }
56
+ return undefined;
57
+ }
58
+ function normalizeProfile(profileValue) {
59
+ const normalized = profileValue?.trim().toLowerCase();
60
+ if (normalized === 'full' || normalized === 'minimal' || normalized === 'core') {
61
+ return normalized;
62
+ }
63
+ return DEFAULT_PROFILE;
64
+ }
65
+ function parseCategoryList(rawValue) {
66
+ const categories = new Set();
67
+ if (!rawValue) {
68
+ return categories;
69
+ }
70
+ const parts = rawValue.split(',');
71
+ for (const part of parts) {
72
+ const normalized = part.trim().toLowerCase();
73
+ if (normalized.length === 0) {
74
+ continue;
75
+ }
76
+ if (VALID_CATEGORIES.has(normalized)) {
77
+ categories.add(normalized);
78
+ }
79
+ }
80
+ return categories;
81
+ }
82
+ /**
83
+ * 解析工具 profile 配置
84
+ */
85
+ export function parseToolProfileConfig(options) {
86
+ const argv = options?.argv ?? process.argv.slice(2);
87
+ const env = options?.env ?? process.env;
88
+ const cliProfile = readCliOption(argv, 'tools-profile');
89
+ const envProfile = env.WEIXIN_MCP_TOOLS_PROFILE;
90
+ const profile = normalizeProfile(cliProfile ?? envProfile);
91
+ const cliEnabledCategories = readCliOption(argv, 'enable-categories');
92
+ const envEnabledCategories = env.WEIXIN_MCP_ENABLE_CATEGORIES;
93
+ const enabledCategories = parseCategoryList(cliEnabledCategories ?? envEnabledCategories);
94
+ const cliDisabledCategories = readCliOption(argv, 'disable-categories');
95
+ const envDisabledCategories = env.WEIXIN_MCP_DISABLE_CATEGORIES;
96
+ const disabledCategories = parseCategoryList(cliDisabledCategories ?? envDisabledCategories);
97
+ return {
98
+ profile,
99
+ enabledCategories,
100
+ disabledCategories,
101
+ };
102
+ }
103
+ function getBaseActiveNames(profile, tools) {
104
+ if (profile === 'full') {
105
+ return new Set(tools.map(tool => tool.name));
106
+ }
107
+ if (profile === 'minimal') {
108
+ return new Set(MINIMAL_TOOL_NAMES);
109
+ }
110
+ return new Set(CORE_TOOL_NAMES);
111
+ }
112
+ /**
113
+ * 根据 profile 与类别开关计算激活工具
114
+ */
115
+ export function resolveToolsByProfile(tools, config) {
116
+ const activeNames = getBaseActiveNames(config.profile, tools);
117
+ for (const tool of tools) {
118
+ const toolCategory = tool.annotations?.category ?? ToolCategory.CORE;
119
+ if (config.enabledCategories.has(toolCategory)) {
120
+ activeNames.add(tool.name);
121
+ }
122
+ }
123
+ for (const tool of tools) {
124
+ const toolCategory = tool.annotations?.category ?? ToolCategory.CORE;
125
+ if (config.disabledCategories.has(toolCategory)) {
126
+ activeNames.delete(tool.name);
127
+ }
128
+ }
129
+ const activeTools = tools.filter(tool => activeNames.has(tool.name));
130
+ const disabledTools = new Map(tools
131
+ .filter(tool => !activeNames.has(tool.name))
132
+ .map(tool => [tool.name, tool]));
133
+ return {
134
+ activeTools,
135
+ disabledTools,
136
+ };
137
+ }
138
+ //# sourceMappingURL=tool-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-profile.js","sourceRoot":"","sources":["../../src/config/tool-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AdapterConnectionResult, ConnectionStrategy, ResolvedConnectionRequest } from './types.js';
2
+ export declare function executeConnectionStrategy(strategy: ConnectionStrategy, request: ResolvedConnectionRequest): Promise<AdapterConnectionResult>;
3
+ //# sourceMappingURL=adapters.d.ts.map