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,650 @@
1
+ /**
2
+ * MiniProgramContext - 小程序自动化上下文管理类
3
+ *
4
+ * 参考 chrome-devtools-mcp 的 McpContext 设计模式
5
+ * 统一管理所有状态,提供类型安全的访问方法
6
+ *
7
+ * 使用 Collector 模式管理 Console 和 Network 数据
8
+ */
9
+ import { ConsoleCollector, NetworkCollector, isConsoleMessage, isExceptionMessage, } from './collectors/index.js';
10
+ import { ConnectionManager, createDisconnectedStatus, } from './connection/index.js';
11
+ import { getPageSnapshot } from './tools.js';
12
+ /**
13
+ * 默认配置
14
+ */
15
+ const DEFAULT_OPTIONS = {
16
+ maxNavigations: 3,
17
+ verbose: false,
18
+ snapshotCacheTtl: 5000,
19
+ };
20
+ /**
21
+ * MiniProgramContext 类
22
+ *
23
+ * 统一管理小程序自动化的所有状态:
24
+ * - miniProgram 实例
25
+ * - currentPage 当前页面
26
+ * - elementMap 元素映射
27
+ * - consoleCollector Console 数据收集器
28
+ * - networkCollector 网络请求收集器
29
+ */
30
+ export class MiniProgramContext {
31
+ // 私有状态
32
+ #miniProgram = null;
33
+ #currentPage = null;
34
+ #elementMap = new Map();
35
+ #options;
36
+ #connectionManager;
37
+ #connectionStatus = createDisconnectedStatus();
38
+ // 使用 Collector 模式管理数据
39
+ #consoleCollector;
40
+ #networkCollector;
41
+ // 快照缓存
42
+ #snapshotCache = {
43
+ snapshot: null,
44
+ elementMap: null,
45
+ path: '',
46
+ timestamp: 0,
47
+ };
48
+ /**
49
+ * 私有构造函数,使用工厂方法创建实例
50
+ */
51
+ constructor(options = {}) {
52
+ this.#options = { ...DEFAULT_OPTIONS, ...options };
53
+ this.#connectionManager = new ConnectionManager();
54
+ // 初始化 Console 收集器
55
+ this.#consoleCollector = new ConsoleCollector({
56
+ maxNavigations: this.#options.maxNavigations,
57
+ verbose: this.#options.verbose,
58
+ });
59
+ // 初始化网络收集器
60
+ this.#networkCollector = new NetworkCollector({
61
+ maxNavigations: this.#options.maxNavigations,
62
+ verbose: this.#options.verbose,
63
+ });
64
+ }
65
+ /**
66
+ * 工厂方法:创建 MiniProgramContext 实例
67
+ */
68
+ static create(options) {
69
+ return new MiniProgramContext(options);
70
+ }
71
+ /**
72
+ * 工厂方法:从已有的 MiniProgram 实例创建上下文
73
+ */
74
+ static async from(miniProgram, options) {
75
+ const context = new MiniProgramContext(options);
76
+ await context.setMiniProgram(miniProgram);
77
+ return context;
78
+ }
79
+ // ============ MiniProgram 相关方法 ============
80
+ /**
81
+ * 获取 MiniProgram 实例
82
+ * @throws 如果未连接则抛出错误
83
+ */
84
+ getMiniProgram() {
85
+ if (!this.#miniProgram) {
86
+ throw new Error('请先连接微信开发者工具');
87
+ }
88
+ return this.#miniProgram;
89
+ }
90
+ /**
91
+ * 设置 MiniProgram 实例
92
+ */
93
+ async setMiniProgram(miniProgram) {
94
+ this.#miniProgram = miniProgram;
95
+ // 自动获取当前页面
96
+ try {
97
+ const page = await miniProgram.currentPage();
98
+ if (page) {
99
+ this.#currentPage = page;
100
+ const pagePath = await page.path;
101
+ this.#connectionStatus = {
102
+ ...this.#connectionStatus,
103
+ state: 'connected',
104
+ connected: true,
105
+ hasCurrentPage: true,
106
+ pagePath,
107
+ };
108
+ }
109
+ }
110
+ catch (error) {
111
+ if (this.#options.verbose) {
112
+ console.warn('[MiniProgramContext] 获取当前页面失败:', error);
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * 检查是否已连接
118
+ */
119
+ isConnected() {
120
+ return this.#connectionStatus.connected;
121
+ }
122
+ /**
123
+ * 断开连接,重置状态
124
+ */
125
+ disconnect() {
126
+ this.#miniProgram = null;
127
+ this.#currentPage = null;
128
+ this.#elementMap.clear();
129
+ this.#consoleCollector.clear();
130
+ this.#consoleCollector.stopMonitoring();
131
+ this.#networkCollector.reset();
132
+ this.invalidateSnapshotCache();
133
+ this.#connectionStatus = createDisconnectedStatus();
134
+ }
135
+ async connectDevtools(request) {
136
+ const result = await this.#connectionManager.connect(request);
137
+ this.#miniProgram = result.miniProgram;
138
+ this.#currentPage = result.currentPage;
139
+ this.#elementMap.clear();
140
+ this.#connectionStatus = this.#connectionManager.getStatusSnapshot();
141
+ return result;
142
+ }
143
+ async reconnectDevtools(request) {
144
+ const result = await this.#connectionManager.reconnect(request);
145
+ this.#miniProgram = result.miniProgram;
146
+ this.#currentPage = result.currentPage;
147
+ this.#elementMap.clear();
148
+ this.#connectionStatus = this.#connectionManager.getStatusSnapshot();
149
+ return result;
150
+ }
151
+ async disconnectDevtools() {
152
+ await this.#connectionManager.disconnect();
153
+ this.disconnect();
154
+ return this.#connectionStatus;
155
+ }
156
+ async getConnectionStatus(options) {
157
+ const refreshHealth = options?.refreshHealth ?? true;
158
+ this.#connectionStatus = refreshHealth
159
+ ? await this.#connectionManager.refreshHealth()
160
+ : this.#connectionManager.getStatusSnapshot();
161
+ if (!this.#connectionStatus.connected) {
162
+ this.#miniProgram = null;
163
+ this.#currentPage = null;
164
+ this.#elementMap.clear();
165
+ return this.#connectionStatus;
166
+ }
167
+ const session = this.#connectionManager.getSession();
168
+ if (session) {
169
+ this.#miniProgram = session.miniProgram;
170
+ this.#currentPage = session.currentPage;
171
+ }
172
+ return this.#connectionStatus;
173
+ }
174
+ // ============ 页面相关方法 ============
175
+ /**
176
+ * 获取当前页面
177
+ * @throws 如果未连接或没有当前页面则抛出错误
178
+ */
179
+ getCurrentPage() {
180
+ if (!this.#currentPage) {
181
+ throw new Error('请先连接微信开发者工具并获取当前页面');
182
+ }
183
+ return this.#currentPage;
184
+ }
185
+ /**
186
+ * 设置当前页面
187
+ */
188
+ setCurrentPage(page) {
189
+ this.#currentPage = page;
190
+ }
191
+ /**
192
+ * 刷新当前页面引用
193
+ */
194
+ async refreshCurrentPage() {
195
+ const miniProgram = this.getMiniProgram();
196
+ const page = await miniProgram.currentPage();
197
+ if (!page) {
198
+ throw new Error('无法获取当前页面');
199
+ }
200
+ this.#currentPage = page;
201
+ return page;
202
+ }
203
+ // ============ 元素映射相关方法 ============
204
+ /**
205
+ * 获取元素映射表(只读)
206
+ */
207
+ getElementMap() {
208
+ return this.#elementMap;
209
+ }
210
+ /**
211
+ * 设置元素映射
212
+ */
213
+ setElementMapEntry(uid, info) {
214
+ this.#elementMap.set(uid, info);
215
+ }
216
+ /**
217
+ * 批量设置元素映射
218
+ */
219
+ setElementMap(map) {
220
+ this.#elementMap = map;
221
+ }
222
+ /**
223
+ * 清空元素映射
224
+ */
225
+ clearElementMap() {
226
+ this.#elementMap.clear();
227
+ }
228
+ /**
229
+ * 通过 UID 获取元素
230
+ * 统一处理:连接检查、快照检查、元素查找、索引定位
231
+ */
232
+ async getElementByUid(uid) {
233
+ // 1. 检查页面是否已连接
234
+ const page = this.getCurrentPage();
235
+ // 2. 检查 UID 是否存在于 elementMap
236
+ const mapInfo = this.#elementMap.get(uid);
237
+ if (!mapInfo) {
238
+ throw new Error(`找不到 UID: ${uid}\n` +
239
+ `请先调用 get_page_snapshot 工具获取页面快照`);
240
+ }
241
+ if (this.#options.verbose) {
242
+ console.error(`[getElementByUid] UID: ${uid}, Selector: ${mapInfo.selector}, Index: ${mapInfo.index}`);
243
+ }
244
+ // 3. 使用选择器获取所有匹配元素
245
+ const elements = await page.$$(mapInfo.selector);
246
+ if (!elements || elements.length === 0) {
247
+ throw new Error(`选择器 "${mapInfo.selector}" 未找到任何元素\n` +
248
+ `页面可能已发生变化,请重新获取快照`);
249
+ }
250
+ // 4. 检查索引是否有效
251
+ if (mapInfo.index >= elements.length) {
252
+ throw new Error(`元素索引 ${mapInfo.index} 超出范围(选择器 "${mapInfo.selector}" 共找到 ${elements.length} 个元素)\n` +
253
+ `页面可能已发生变化,请重新获取快照`);
254
+ }
255
+ // 5. 返回目标元素
256
+ const element = elements[mapInfo.index];
257
+ if (!element) {
258
+ throw new Error(`无法获取索引 ${mapInfo.index} 的元素`);
259
+ }
260
+ return element;
261
+ }
262
+ // ============ 快照缓存相关方法 ============
263
+ /**
264
+ * 获取页面快照(带缓存)
265
+ *
266
+ * 缓存策略:
267
+ * - 在 TTL 内返回缓存的快照(避免重复调用 getPageSnapshot)
268
+ * - 页面路径变化时自动刷新缓存
269
+ * - 支持强制刷新
270
+ *
271
+ * @param options.forceRefresh 强制刷新缓存
272
+ * @param options.ttl 覆盖默认 TTL(毫秒)
273
+ * @returns 页面快照和元素映射
274
+ */
275
+ async getPageSnapshotCached(options) {
276
+ const { forceRefresh = false, ttl = this.#options.snapshotCacheTtl } = options || {};
277
+ const page = this.getCurrentPage();
278
+ const currentPath = await page.path;
279
+ const now = Date.now();
280
+ // 检查缓存有效性
281
+ const cacheValid = !forceRefresh &&
282
+ this.#snapshotCache.snapshot !== null &&
283
+ this.#snapshotCache.elementMap !== null &&
284
+ this.#snapshotCache.path === currentPath &&
285
+ (now - this.#snapshotCache.timestamp) < ttl;
286
+ if (cacheValid) {
287
+ if (this.#options.verbose) {
288
+ console.error(`[SnapshotCache] 缓存命中,路径: ${currentPath},缓存时长: ${now - this.#snapshotCache.timestamp}ms`);
289
+ }
290
+ return {
291
+ snapshot: this.#snapshotCache.snapshot,
292
+ elementMap: this.#snapshotCache.elementMap,
293
+ };
294
+ }
295
+ // 缓存未命中,获取新快照
296
+ if (this.#options.verbose) {
297
+ const reason = forceRefresh
298
+ ? '强制刷新'
299
+ : this.#snapshotCache.snapshot === null
300
+ ? '首次获取'
301
+ : this.#snapshotCache.path !== currentPath
302
+ ? '页面路径变化'
303
+ : 'TTL 过期';
304
+ console.error(`[SnapshotCache] 缓存未命中(${reason}),获取新快照...`);
305
+ }
306
+ const { snapshot, elementMap } = await getPageSnapshot(page);
307
+ // 更新缓存
308
+ this.#snapshotCache = {
309
+ snapshot,
310
+ elementMap,
311
+ path: currentPath,
312
+ timestamp: now,
313
+ };
314
+ // 同步更新 elementMap
315
+ this.#elementMap = elementMap;
316
+ if (this.#options.verbose) {
317
+ console.error(`[SnapshotCache] 缓存已更新,元素数量: ${snapshot.elements.length}`);
318
+ }
319
+ return { snapshot, elementMap };
320
+ }
321
+ /**
322
+ * 使缓存失效
323
+ * 在导航后或 DOM 发生变化时调用
324
+ */
325
+ invalidateSnapshotCache() {
326
+ this.#snapshotCache = {
327
+ snapshot: null,
328
+ elementMap: null,
329
+ path: '',
330
+ timestamp: 0,
331
+ };
332
+ if (this.#options.verbose) {
333
+ console.error('[SnapshotCache] 缓存已失效');
334
+ }
335
+ }
336
+ /**
337
+ * 获取缓存状态信息(用于调试)
338
+ */
339
+ getSnapshotCacheStatus() {
340
+ const now = Date.now();
341
+ return {
342
+ isCached: this.#snapshotCache.snapshot !== null,
343
+ path: this.#snapshotCache.path,
344
+ age: this.#snapshotCache.timestamp > 0 ? now - this.#snapshotCache.timestamp : -1,
345
+ elementCount: this.#snapshotCache.snapshot?.elements.length ?? 0,
346
+ ttl: this.#options.snapshotCacheTtl,
347
+ };
348
+ }
349
+ // ============ Console Collector 相关方法 ============
350
+ /**
351
+ * 获取 Console 收集器(新 API)
352
+ */
353
+ getConsoleCollector() {
354
+ return this.#consoleCollector;
355
+ }
356
+ /**
357
+ * 开始 Console 监听
358
+ */
359
+ startConsoleMonitoring() {
360
+ this.#consoleCollector.startMonitoring();
361
+ }
362
+ /**
363
+ * 停止 Console 监听
364
+ */
365
+ stopConsoleMonitoring() {
366
+ this.#consoleCollector.stopMonitoring();
367
+ }
368
+ /**
369
+ * 检查是否正在监听 Console
370
+ */
371
+ isConsoleMonitoring() {
372
+ return this.#consoleCollector.isMonitoring();
373
+ }
374
+ /**
375
+ * 添加 Console 消息
376
+ * @returns 分配的 msgid
377
+ */
378
+ addConsoleMessage(message) {
379
+ return this.#consoleCollector.addMessage(message);
380
+ }
381
+ /**
382
+ * 添加异常消息
383
+ * @returns 分配的 msgid
384
+ */
385
+ addExceptionMessage(exception) {
386
+ return this.#consoleCollector.addException(exception);
387
+ }
388
+ /**
389
+ * 通过 ID 获取消息
390
+ */
391
+ getConsoleMessageById(msgid) {
392
+ return this.#consoleCollector.getMessageById(msgid);
393
+ }
394
+ /**
395
+ * 获取所有消息(支持分页和过滤)
396
+ */
397
+ getConsoleMessages(options) {
398
+ const { includePreserved = false, types, pageSize, pageIdx = 0 } = options || {};
399
+ return this.#consoleCollector.getMessages({
400
+ includePreserved,
401
+ types: types,
402
+ pageSize,
403
+ pageIdx,
404
+ });
405
+ }
406
+ /**
407
+ * 在导航时分割存储(保留历史)
408
+ */
409
+ splitConsoleAfterNavigation() {
410
+ this.#consoleCollector.splitAfterNavigation();
411
+ }
412
+ /**
413
+ * 清空 Console 消息
414
+ */
415
+ clearConsoleMessages() {
416
+ this.#consoleCollector.clear();
417
+ }
418
+ // ============ Network Collector 相关方法 ============
419
+ /**
420
+ * 获取 Network 收集器(新 API)
421
+ */
422
+ getNetworkCollector() {
423
+ return this.#networkCollector;
424
+ }
425
+ /**
426
+ * 开始网络监听
427
+ */
428
+ startNetworkMonitoring() {
429
+ this.#networkCollector.startMonitoring();
430
+ }
431
+ /**
432
+ * 停止网络监听
433
+ */
434
+ stopNetworkMonitoring() {
435
+ this.#networkCollector.stopMonitoring();
436
+ }
437
+ /**
438
+ * 检查是否正在监听网络
439
+ */
440
+ isNetworkMonitoring() {
441
+ return this.#networkCollector.isMonitoring();
442
+ }
443
+ /**
444
+ * 添加网络请求
445
+ */
446
+ addNetworkRequest(request) {
447
+ return this.#networkCollector.addRequest(request);
448
+ }
449
+ /**
450
+ * 更新网络请求
451
+ */
452
+ updateNetworkRequest(id, updates) {
453
+ return this.#networkCollector.updateRequest(id, updates);
454
+ }
455
+ /**
456
+ * 完成网络请求
457
+ */
458
+ completeNetworkRequest(id, response) {
459
+ return this.#networkCollector.completeRequest(id, response);
460
+ }
461
+ /**
462
+ * 获取网络请求
463
+ */
464
+ getNetworkRequests(options) {
465
+ const { limit, ...queryOptions } = options || {};
466
+ const requests = this.#networkCollector.getRequests(queryOptions);
467
+ if (limit && limit > 0) {
468
+ return requests.slice(0, limit);
469
+ }
470
+ return requests;
471
+ }
472
+ /**
473
+ * 清空网络请求
474
+ */
475
+ clearNetworkRequests() {
476
+ this.#networkCollector.clearCurrentSession();
477
+ }
478
+ /**
479
+ * 在导航时分割存储(保留历史)
480
+ */
481
+ splitNetworkAfterNavigation() {
482
+ this.#networkCollector.splitAfterNavigation();
483
+ }
484
+ // ============ ToolContext 接口实现 ============
485
+ /**
486
+ * ToolContext 接口:获取 miniProgram
487
+ */
488
+ get miniProgram() {
489
+ return this.#miniProgram;
490
+ }
491
+ /**
492
+ * ToolContext 接口:设置 miniProgram
493
+ */
494
+ set miniProgram(value) {
495
+ this.#miniProgram = value;
496
+ }
497
+ /**
498
+ * ToolContext 接口:获取 currentPage
499
+ */
500
+ get currentPage() {
501
+ return this.#currentPage;
502
+ }
503
+ /**
504
+ * ToolContext 接口:设置 currentPage
505
+ */
506
+ set currentPage(value) {
507
+ this.#currentPage = value;
508
+ }
509
+ /**
510
+ * ToolContext 接口:获取 elementMap
511
+ */
512
+ get elementMap() {
513
+ return this.#elementMap;
514
+ }
515
+ /**
516
+ * ToolContext 接口:设置 elementMap
517
+ */
518
+ set elementMap(value) {
519
+ this.#elementMap = value;
520
+ }
521
+ /**
522
+ * ToolContext 接口:获取 consoleStorage(向后兼容适配器)
523
+ * 将 Collector 数据转换为 ConsoleStorage 格式
524
+ */
525
+ get consoleStorage() {
526
+ // 构建导航会话数据
527
+ const navigations = this.#consoleCollector.getNavigations();
528
+ const legacyNavigations = navigations.map(session => {
529
+ const messages = [];
530
+ const exceptions = [];
531
+ for (const item of session.items) {
532
+ if (isConsoleMessage(item)) {
533
+ messages.push(item);
534
+ }
535
+ else if (isExceptionMessage(item)) {
536
+ exceptions.push(item);
537
+ }
538
+ }
539
+ return {
540
+ messages,
541
+ exceptions,
542
+ timestamp: session.timestamp,
543
+ };
544
+ });
545
+ // 构建 ID 映射表
546
+ const messageIdMap = new Map();
547
+ const idMap = this.#consoleCollector.getIdMap();
548
+ for (const [id, entry] of idMap) {
549
+ messageIdMap.set(id, entry);
550
+ }
551
+ return {
552
+ navigations: legacyNavigations,
553
+ messageIdMap,
554
+ isMonitoring: this.#consoleCollector.isMonitoring(),
555
+ startTime: this.#consoleCollector.getStartTime(),
556
+ maxNavigations: this.#options.maxNavigations,
557
+ };
558
+ }
559
+ /**
560
+ * ToolContext 接口:设置 consoleStorage(向后兼容适配器)
561
+ * 注意:这个 setter 主要用于兼容性,新代码应直接使用 Collector
562
+ */
563
+ set consoleStorage(value) {
564
+ // 清空当前收集器
565
+ this.#consoleCollector.clear();
566
+ // 如果监听状态不同,同步监听状态
567
+ if (value.isMonitoring && !this.#consoleCollector.isMonitoring()) {
568
+ this.#consoleCollector.startMonitoring();
569
+ }
570
+ else if (!value.isMonitoring && this.#consoleCollector.isMonitoring()) {
571
+ this.#consoleCollector.stopMonitoring();
572
+ }
573
+ // 导入历史数据(从最旧的导航开始)
574
+ for (let i = value.navigations.length - 1; i >= 0; i--) {
575
+ const nav = value.navigations[i];
576
+ // 如果不是最后一个,先分割
577
+ if (i < value.navigations.length - 1) {
578
+ this.#consoleCollector.splitAfterNavigation();
579
+ }
580
+ // 添加消息和异常
581
+ for (const msg of nav.messages) {
582
+ this.#consoleCollector.addMessage(msg);
583
+ }
584
+ for (const exc of nav.exceptions) {
585
+ this.#consoleCollector.addException(exc);
586
+ }
587
+ }
588
+ }
589
+ /**
590
+ * ToolContext 接口:获取 networkStorage(向后兼容适配器)
591
+ * 将 Collector 数据转换为 NetworkStorage 格式
592
+ */
593
+ get networkStorage() {
594
+ return {
595
+ requests: this.#networkCollector.getData({ includePreserved: true }),
596
+ isMonitoring: this.#networkCollector.isMonitoring(),
597
+ startTime: this.#networkCollector.getStartTime(),
598
+ originalMethods: this.#networkCollector.getOriginalMethods(),
599
+ };
600
+ }
601
+ /**
602
+ * ToolContext 接口:设置 networkStorage(向后兼容适配器)
603
+ * 注意:这个 setter 主要用于兼容性,新代码应直接使用 Collector
604
+ */
605
+ set networkStorage(value) {
606
+ // 重置收集器
607
+ this.#networkCollector.reset();
608
+ // 同步监听状态
609
+ if (value.isMonitoring) {
610
+ this.#networkCollector.startMonitoring();
611
+ }
612
+ // 设置原始方法
613
+ this.#networkCollector.setOriginalMethods(value.originalMethods);
614
+ // 导入请求数据
615
+ for (const request of value.requests) {
616
+ this.#networkCollector.addRequest(request);
617
+ }
618
+ }
619
+ /**
620
+ * ToolContext 接口:获取 connectionStatus
621
+ */
622
+ get connectionStatus() {
623
+ return this.#connectionStatus;
624
+ }
625
+ /**
626
+ * ToolContext 接口:设置 connectionStatus(兼容层)
627
+ */
628
+ set connectionStatus(value) {
629
+ this.#connectionStatus = value;
630
+ }
631
+ // ============ 调试和日志 ============
632
+ /**
633
+ * 获取上下文状态摘要(用于调试)
634
+ */
635
+ getStatusSummary() {
636
+ const now = Date.now();
637
+ return {
638
+ connected: this.#connectionStatus.connected,
639
+ hasCurrentPage: this.#connectionStatus.hasCurrentPage,
640
+ elementCount: this.#elementMap.size,
641
+ consoleMonitoring: this.#consoleCollector.isMonitoring(),
642
+ consoleMessageCount: this.#consoleCollector.getTotalCount(),
643
+ networkMonitoring: this.#networkCollector.isMonitoring(),
644
+ networkRequestCount: this.#networkCollector.getCurrentCount(),
645
+ snapshotCached: this.#snapshotCache.snapshot !== null,
646
+ snapshotCacheAge: this.#snapshotCache.timestamp > 0 ? now - this.#snapshotCache.timestamp : -1,
647
+ };
648
+ }
649
+ }
650
+ //# sourceMappingURL=MiniProgramContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniProgramContext.js","sourceRoot":"","sources":["../src/MiniProgramContext.ts"],"names":[],"mappings":"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"}