@pyrokine/mcp-chrome 2.3.2 → 2.4.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 (86) hide show
  1. package/README.md +40 -13
  2. package/README_zh.md +30 -11
  3. package/dist/anti-detection/behavior.d.ts.map +1 -1
  4. package/dist/anti-detection/behavior.js.map +1 -1
  5. package/dist/anti-detection/injection.js.map +1 -1
  6. package/dist/cdp/client.d.ts.map +1 -1
  7. package/dist/cdp/client.js.map +1 -1
  8. package/dist/cdp/launcher.d.ts.map +1 -1
  9. package/dist/cdp/launcher.js.map +1 -1
  10. package/dist/core/auto-wait.d.ts.map +1 -1
  11. package/dist/core/auto-wait.js.map +1 -1
  12. package/dist/core/browser-driver.d.ts +6 -1
  13. package/dist/core/browser-driver.d.ts.map +1 -1
  14. package/dist/core/browser-driver.js.map +1 -1
  15. package/dist/core/errors.d.ts.map +1 -1
  16. package/dist/core/errors.js.map +1 -1
  17. package/dist/core/extension-errors.d.ts.map +1 -1
  18. package/dist/core/locator.d.ts.map +1 -1
  19. package/dist/core/locator.js.map +1 -1
  20. package/dist/core/retry.js.map +1 -1
  21. package/dist/core/session.d.ts +2 -2
  22. package/dist/core/session.d.ts.map +1 -1
  23. package/dist/core/session.js +1 -1
  24. package/dist/core/session.js.map +1 -1
  25. package/dist/core/types.d.ts.map +1 -1
  26. package/dist/core/types.js.map +1 -1
  27. package/dist/core/unified-session.d.ts +17 -2
  28. package/dist/core/unified-session.d.ts.map +1 -1
  29. package/dist/core/unified-session.js +44 -6
  30. package/dist/core/unified-session.js.map +1 -1
  31. package/dist/extension/bridge.d.ts +8 -2
  32. package/dist/extension/bridge.d.ts.map +1 -1
  33. package/dist/extension/bridge.js +5 -1
  34. package/dist/extension/bridge.js.map +1 -1
  35. package/dist/extension/http-server.d.ts +17 -0
  36. package/dist/extension/http-server.d.ts.map +1 -1
  37. package/dist/extension/http-server.js +63 -8
  38. package/dist/extension/http-server.js.map +1 -1
  39. package/dist/extension/index.d.ts +1 -0
  40. package/dist/extension/index.d.ts.map +1 -1
  41. package/dist/extension/index.js.map +1 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/tools/browse.d.ts.map +1 -1
  44. package/dist/tools/browse.js +13 -37
  45. package/dist/tools/browse.js.map +1 -1
  46. package/dist/tools/cookies.js.map +1 -1
  47. package/dist/tools/diagnostics.d.ts +31 -0
  48. package/dist/tools/diagnostics.d.ts.map +1 -0
  49. package/dist/tools/diagnostics.js +93 -0
  50. package/dist/tools/diagnostics.js.map +1 -0
  51. package/dist/tools/evaluate.d.ts +15 -0
  52. package/dist/tools/evaluate.d.ts.map +1 -1
  53. package/dist/tools/evaluate.js +136 -84
  54. package/dist/tools/evaluate.js.map +1 -1
  55. package/dist/tools/extract.d.ts.map +1 -1
  56. package/dist/tools/extract.js +36 -17
  57. package/dist/tools/extract.js.map +1 -1
  58. package/dist/tools/input.d.ts +6 -0
  59. package/dist/tools/input.d.ts.map +1 -1
  60. package/dist/tools/input.js +394 -248
  61. package/dist/tools/input.js.map +1 -1
  62. package/dist/tools/logs.d.ts +17 -0
  63. package/dist/tools/logs.d.ts.map +1 -1
  64. package/dist/tools/logs.js +41 -10
  65. package/dist/tools/logs.js.map +1 -1
  66. package/dist/tools/network-sanitizer.d.ts +15 -0
  67. package/dist/tools/network-sanitizer.d.ts.map +1 -0
  68. package/dist/tools/network-sanitizer.js +61 -0
  69. package/dist/tools/network-sanitizer.js.map +1 -0
  70. package/dist/tools/post-condition.d.ts +18 -1
  71. package/dist/tools/post-condition.d.ts.map +1 -1
  72. package/dist/tools/post-condition.js +52 -94
  73. package/dist/tools/post-condition.js.map +1 -1
  74. package/dist/tools/target-diagnostics.d.ts +31 -0
  75. package/dist/tools/target-diagnostics.d.ts.map +1 -0
  76. package/dist/tools/target-diagnostics.js +91 -0
  77. package/dist/tools/target-diagnostics.js.map +1 -0
  78. package/dist/tools/wait.d.ts.map +1 -1
  79. package/dist/tools/wait.js +183 -209
  80. package/dist/tools/wait.js.map +1 -1
  81. package/extension/dist/assets/content.ts-Cj_iiU2s.js +25 -0
  82. package/extension/dist/assets/{index.ts-CJXGbOcp.js → index.ts-GG6dPUPX.js} +569 -347
  83. package/extension/dist/manifest.json +3 -3
  84. package/extension/dist/service-worker-loader.js +1 -1
  85. package/package.json +14 -10
  86. package/extension/dist/assets/content.ts-pEASbjEL.js +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAqQxE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAS5D"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAaxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAExE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AA8F3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAE1E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAAG,uBAAuB,CAEnH;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG;IACzD,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,QAAQ,GAAG,SAAS,CAAA;IAClC,SAAS,EAAE,OAAO,CAAA;CACrB,CAeA;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG;IACrD,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAA;IAChD,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACjC,SAAS,EAAE,OAAO,CAAA;CACrB,CAaA;AAmKD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAS5D"}
@@ -6,6 +6,8 @@
6
6
  import { readFile } from 'fs/promises';
7
7
  import { z } from 'zod';
8
8
  import { CWD_PATH_PREFIX, formatErrorResponse, formatResponse, getUnifiedSession, resolveScopedInputPath, resolveScopedOutputPath, TMP_PATH_PREFIX, writePrivateFile, } from '../core/index.js';
9
+ import { EvaluateResultTooLargeError, NonSerializableEvaluateResultError } from '../core/types.js';
10
+ import { appendDiagnostics, finishDiagnostics, startDiagnostics } from './diagnostics.js';
9
11
  import { postConditionSchema, waitForPostCondition } from './post-condition.js';
10
12
  /**
11
13
  * evaluate 参数 schema
@@ -32,6 +34,10 @@ const evaluateSchema = z.object({
32
34
  .enum(['stealth', 'precise'])
33
35
  .optional()
34
36
  .describe('执行模式,precise(默认)使用 debugger API,可绕过 CSP;stealth 使用 JS 注入,不触发调试提示但受 CSP 限制'),
37
+ staleContextRetry: z
38
+ .enum(['never', 'readOnly'])
39
+ .optional()
40
+ .describe('iframe precise 执行遇到 stale execution context 时的重试契约;默认 never 不重放,readOnly 表示脚本无副作用并允许重新解析 context 后重放一次'),
35
41
  diagnostics: z.boolean().optional().describe('执行后返回新增 console error/warning 和失败网络请求摘要'),
36
42
  postCondition: postConditionSchema
37
43
  .optional()
@@ -45,27 +51,6 @@ const evaluateSchema = z.object({
45
51
  .optional()
46
52
  .describe('iframe 定位(可选,仅 Extension 模式),CSS 选择器(如 "iframe#main")或索引(如 0),不指定则在主框架执行'),
47
53
  });
48
- async function captureDiagnosticsStart(unifiedSession) {
49
- await unifiedSession.enableConsole();
50
- await unifiedSession.enableNetwork();
51
- const consoleLogs = await unifiedSession.getConsoleLogs();
52
- const network = await unifiedSession.getNetworkRequests();
53
- return { consoleCount: consoleLogs.length, networkCount: network.length };
54
- }
55
- async function captureDiagnosticsDelta(unifiedSession, start) {
56
- const consoleLogs = await unifiedSession.getConsoleLogs();
57
- const network = await unifiedSession.getNetworkRequests();
58
- return {
59
- console: consoleLogs
60
- .slice(start.consoleCount)
61
- .filter((item) => ['error', 'warning', 'warn'].includes(item.level))
62
- .slice(-20),
63
- failedRequests: network
64
- .slice(start.networkCount)
65
- .filter((item) => item.errorText || (item.status !== undefined && item.status >= 400))
66
- .slice(-20),
67
- };
68
- }
69
54
  function cspErrorResponse() {
70
55
  return {
71
56
  content: [
@@ -83,38 +68,61 @@ function cspErrorResponse() {
83
68
  isError: true,
84
69
  };
85
70
  }
86
- function appendDiagnostics(response, diagnostics) {
87
- const text = response.content[0]?.text;
88
- if (!text) {
89
- return response;
90
- }
91
- try {
92
- const parsed = JSON.parse(text);
93
- parsed.diagnostics = diagnostics;
94
- return {
95
- ...response,
96
- content: [{ type: 'text', text: JSON.stringify(parsed, null, 2) }],
97
- };
98
- }
99
- catch {
100
- return response;
101
- }
102
- }
103
- async function formatEvaluateErrorResponse(error, unifiedSession, diagnosticsStart) {
71
+ function formatEvaluateErrorResponse(error) {
104
72
  const errorMessage = error instanceof Error ? error.message : String(error);
105
- const response = errorMessage.includes('CSP') ||
73
+ return errorMessage.includes('CSP') ||
106
74
  errorMessage.includes('Content Security Policy') ||
107
75
  errorMessage.includes('unsafe-eval')
108
76
  ? cspErrorResponse()
109
77
  : formatErrorResponse(error);
110
- if (!unifiedSession || !diagnosticsStart) {
111
- return response;
78
+ }
79
+ export function resolveEvaluateMode(mode) {
80
+ return mode ?? 'precise';
81
+ }
82
+ export function resolveStaleContextRetryPolicy(policy) {
83
+ return policy ?? 'never';
84
+ }
85
+ export function classifyEvaluateActionError(error) {
86
+ const message = error instanceof Error ? error.message : String(error);
87
+ const preActionTimeout = /tim(?:eout|ed out) before/i.test(message);
88
+ const timedOut = !preActionTimeout && /Request timeout|timed out|timeout|超时/i.test(message);
89
+ const pageEvaluationStarted = /Evaluation failed|exception|ReferenceError|TypeError|SyntaxError|RangeError|URIError|(?:^|\n)Error:/i.test(message);
90
+ const executionStatusUnknown = timedOut || /FRAME_STALE_CONTEXT|FRAME_EVALUATION_FAILED|Execution context became stale/i.test(message);
91
+ return {
92
+ actionExecuted: executionStatusUnknown || pageEvaluationStarted,
93
+ actionStatus: executionStatusUnknown ? 'unknown' : 'failed',
94
+ retryable: /timeout|timed out|超时|disconnect|未连接|context|debugger|attach/i.test(message),
95
+ };
96
+ }
97
+ export function classifyEvaluateFailure(error) {
98
+ if (error instanceof NonSerializableEvaluateResultError || error instanceof EvaluateResultTooLargeError) {
99
+ return {
100
+ actionExecuted: true,
101
+ actionStatus: 'completed',
102
+ failureStage: 'output',
103
+ retryable: false,
104
+ };
112
105
  }
106
+ return {
107
+ ...classifyEvaluateActionError(error),
108
+ failureStage: 'action',
109
+ };
110
+ }
111
+ function appendEvaluateFailureMetadata(response, error, verificationRequested, overrides = {}) {
112
+ const text = response.content[0]?.text;
113
+ if (!text)
114
+ return undefined;
113
115
  try {
114
- return appendDiagnostics(response, await captureDiagnosticsDelta(unifiedSession, diagnosticsStart));
116
+ const payload = JSON.parse(text);
117
+ Object.assign(payload, classifyEvaluateFailure(error), {
118
+ verificationRequested,
119
+ verificationStatus: 'unavailable',
120
+ ...overrides,
121
+ });
122
+ return payload;
115
123
  }
116
124
  catch {
117
- return response;
125
+ return undefined;
118
126
  }
119
127
  }
120
128
  async function handleEvaluate(args) {
@@ -145,59 +153,103 @@ async function handleEvaluate(args) {
145
153
  const unifiedSession = getUnifiedSession();
146
154
  return await unifiedSession.withTabId(args.tabId, async () => {
147
155
  return await unifiedSession.withFrame(args.frame, async () => {
148
- const diagnosticsStart = args.diagnostics ? await captureDiagnosticsStart(unifiedSession) : undefined;
156
+ const diagnostics = await startDiagnostics(unifiedSession, args.diagnostics);
157
+ const evaluationMode = resolveEvaluateMode(args.mode);
158
+ const staleContextRetry = resolveStaleContextRetryPolicy(args.staleContextRetry);
159
+ let result;
160
+ let evaluationMetadata;
161
+ try {
162
+ result = await unifiedSession.evaluate(script, evaluationMode, args.timeout, args.args, {
163
+ staleContextRetry,
164
+ });
165
+ evaluationMetadata = unifiedSession.consumeLastEvaluationMetadata();
166
+ }
167
+ catch (error) {
168
+ evaluationMetadata = unifiedSession.consumeLastEvaluationMetadata();
169
+ const response = formatEvaluateErrorResponse(error);
170
+ const payload = appendEvaluateFailureMetadata(response, error, Boolean(args.postCondition), {
171
+ staleContextRetry,
172
+ ...(evaluationMetadata ?? {}),
173
+ });
174
+ if (payload) {
175
+ appendDiagnostics(payload, await finishDiagnostics(unifiedSession, diagnostics));
176
+ response.content[0].text = JSON.stringify(payload, null, 2);
177
+ }
178
+ return response;
179
+ }
180
+ const normalizedResult = result === undefined ? null : result;
181
+ const postCondition = args.postCondition
182
+ ? await waitForPostCondition(unifiedSession, args.postCondition, 'evaluate', evaluationMode)
183
+ : undefined;
184
+ const payload = {
185
+ success: postCondition ? postCondition.verificationStatus === 'matched' : true,
186
+ actionExecuted: true,
187
+ actionStatus: 'completed',
188
+ verificationRequested: Boolean(postCondition),
189
+ verificationStatus: postCondition?.verificationStatus ?? 'unavailable',
190
+ failureStage: postCondition && postCondition.verificationStatus !== 'matched' ? 'verification' : undefined,
191
+ retryable: postCondition?.retryable ?? false,
192
+ ...(args.frame !== undefined ? { staleContextRetry } : {}),
193
+ ...(evaluationMetadata ?? {}),
194
+ ...(postCondition ? { postCondition } : {}),
195
+ };
149
196
  try {
150
- const result = await unifiedSession.evaluate(script, args.mode, args.timeout, args.args);
151
- const normalizedResult = result === undefined ? null : result;
152
- const postCondition = args.postCondition
153
- ? await waitForPostCondition(unifiedSession, args.postCondition, 'evaluate')
154
- : undefined;
155
- const diagnostics = diagnosticsStart
156
- ? await captureDiagnosticsDelta(unifiedSession, diagnosticsStart)
157
- : undefined;
158
197
  if (outputPath) {
159
- // string 类型直接写入原始文本,其他类型 JSON 序列化
160
198
  const content = typeof result === 'string' ? result : JSON.stringify(normalizedResult, null, 2);
161
199
  await writePrivateFile(outputPath, content, 'utf-8');
162
- return formatResponse({
163
- success: true,
164
- output: outputPath,
165
- ...(diagnostics ? { diagnostics } : {}),
166
- ...(postCondition ? { postCondition } : {}),
167
- });
200
+ payload.output = outputPath;
168
201
  }
169
- const serialized = JSON.stringify({ success: true, result: normalizedResult }, null, 2);
170
- // 检测结果大小,超过 100KB 自动保存到受控临时目录
171
- if (serialized.length > 100_000) {
172
- const suffix = typeof result === 'string' ? 'txt' : 'json';
173
- const autoSavedPath = (await resolveScopedOutputPath(`${TMP_PATH_PREFIX}evaluate/auto-${Date.now()}.${suffix}`, 'mcp-chrome')).absolutePath;
174
- const fileContent = typeof result === 'string' ? result : JSON.stringify(normalizedResult, null, 2);
175
- await writePrivateFile(autoSavedPath, fileContent, 'utf-8');
176
- return formatResponse({
177
- success: true,
178
- autoSaved: true,
179
- path: autoSavedPath,
180
- size: fileContent.length,
181
- hint: '结果过大已自动保存到受控临时目录,请使用 Read 工具读取',
182
- ...(diagnostics ? { diagnostics } : {}),
183
- ...(postCondition ? { postCondition } : {}),
184
- });
202
+ else {
203
+ const serialized = JSON.stringify(normalizedResult, null, 2);
204
+ if (serialized.length > 100_000) {
205
+ const suffix = typeof result === 'string' ? 'txt' : 'json';
206
+ const autoSavedPath = (await resolveScopedOutputPath(`${TMP_PATH_PREFIX}evaluate/auto-${Date.now()}.${suffix}`, 'mcp-chrome')).absolutePath;
207
+ const fileContent = typeof result === 'string' ? result : serialized;
208
+ await writePrivateFile(autoSavedPath, fileContent, 'utf-8');
209
+ Object.assign(payload, {
210
+ autoSaved: true,
211
+ path: autoSavedPath,
212
+ size: fileContent.length,
213
+ hint: '结果过大已自动保存到受控临时目录,请使用 Read 工具读取',
214
+ });
215
+ }
216
+ else {
217
+ payload.result = normalizedResult;
218
+ }
185
219
  }
186
- return formatResponse({
187
- success: true,
188
- result: normalizedResult,
189
- ...(diagnostics ? { diagnostics } : {}),
190
- ...(postCondition ? { postCondition } : {}),
191
- });
192
220
  }
193
221
  catch (error) {
194
- return await formatEvaluateErrorResponse(error, unifiedSession, diagnosticsStart);
222
+ const response = formatEvaluateErrorResponse(error);
223
+ const failurePayload = appendEvaluateFailureMetadata(response, error, Boolean(postCondition), {
224
+ actionExecuted: true,
225
+ actionStatus: 'completed',
226
+ verificationStatus: postCondition?.verificationStatus ?? 'unavailable',
227
+ failureStage: 'output',
228
+ retryable: false,
229
+ ...(postCondition ? { postCondition } : {}),
230
+ });
231
+ if (failurePayload) {
232
+ appendDiagnostics(failurePayload, await finishDiagnostics(unifiedSession, diagnostics));
233
+ response.content[0].text = JSON.stringify(failurePayload, null, 2);
234
+ }
235
+ return response;
195
236
  }
237
+ appendDiagnostics(payload, await finishDiagnostics(unifiedSession, diagnostics));
238
+ return formatResponse(payload);
196
239
  });
197
240
  }); // withTabId
198
241
  }
199
242
  catch (error) {
200
- return await formatEvaluateErrorResponse(error);
243
+ const response = formatEvaluateErrorResponse(error);
244
+ const payload = appendEvaluateFailureMetadata(response, error, Boolean(args.postCondition));
245
+ if (payload) {
246
+ payload.diagnosticsStatus = args.diagnostics ? 'unavailable' : 'disabled';
247
+ if (args.diagnostics) {
248
+ payload.diagnosticsError = 'diagnostics 未能在 tab/frame 初始化失败前启动';
249
+ }
250
+ response.content[0].text = JSON.stringify(payload, null, 2);
251
+ }
252
+ return response;
201
253
  }
202
254
  }
203
255
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAq5CxE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAS3D"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AA+6CxE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAS3D"}
@@ -16,6 +16,8 @@ import { z } from 'zod';
16
16
  import { CWD_PATH_PREFIX, formatErrorResponse, formatResponse, getSession, getUnifiedSession, resolveScopedOutputPath, TMP_PATH_PREFIX, writePrivateFile, } from '../core/index.js';
17
17
  import { comparePngImages, MAX_COMPARE_PIXELS, MAX_COMPARE_PNG_BYTES, readPngHeader } from './png.js';
18
18
  import { targetToFindParams, targetZodSchema } from './schema.js';
19
+ import { sanitizeUrlRecords } from './network-sanitizer.js';
20
+ import { buildTargetDiagnostics, TargetTimeoutError } from './target-diagnostics.js';
19
21
  /** 无 output 时附录返回的最大图片数 */
20
22
  const MAX_APPENDIX_IMAGES = 20;
21
23
  /**
@@ -81,18 +83,18 @@ const extractSchema = z.object({
81
83
  async function handleExtract(args) {
82
84
  try {
83
85
  const unifiedSession = getUnifiedSession();
84
- const useExtension = unifiedSession.isExtensionConnected();
85
- const session = getSession();
86
- const frameHtmlError = validateFrameHtmlArgs(args, useExtension);
87
- if (frameHtmlError) {
88
- return frameHtmlError;
89
- }
90
86
  // 多 tab 并行:临时切换到指定 tab
91
87
  return await unifiedSession.withTabId(args.tabId, async () => {
92
88
  return await unifiedSession.withFrame(args.frame, async () => {
89
+ const useExtension = unifiedSession.getMode() === 'extension';
90
+ const frameHtmlError = validateFrameHtmlArgs(args, useExtension);
91
+ if (frameHtmlError) {
92
+ return frameHtmlError;
93
+ }
94
+ const session = getSession();
93
95
  // Extension 路径:等待目标元素出现(如果指定了 target + timeout)
94
96
  if (useExtension && args.target && args.timeout !== undefined) {
95
- await waitForTargetExtension(unifiedSession, args.target, args.timeout);
97
+ await waitForTargetExtension(unifiedSession, args.target, args.timeout, args.frame);
96
98
  }
97
99
  return handleExtractInFrame({ unifiedSession, session, useExtension }, args);
98
100
  }); // withFrame
@@ -337,13 +339,13 @@ async function handleDomSnapshotState(unifiedSession, useExtension, args) {
337
339
  return formatResponse({ success: true, type: 'state', mode: 'domsnapshot', snapshot });
338
340
  }
339
341
  async function handleDiagnosticBundleExtract({ unifiedSession, useExtension }, args) {
340
- const state = unifiedSession.getState();
342
+ const state = await unifiedSession.getLiveState().catch(() => null);
341
343
  const metadata = await unifiedSession.getMetadata();
342
344
  const frames = useExtension ? await unifiedSession.getFrames() : { frames: [] };
343
345
  await unifiedSession.enableConsole();
344
346
  await unifiedSession.enableNetwork();
345
- const consoleLogs = await unifiedSession.getConsoleLogs();
346
- const networkRequests = await unifiedSession.getNetworkRequests();
347
+ const consoleLogs = sanitizeUrlRecords(await unifiedSession.getConsoleLogs());
348
+ const networkRequests = sanitizeUrlRecords(await unifiedSession.getNetworkRequests());
347
349
  const bundle = {
348
350
  schema: 'mcp-chrome.diagnosticBundle.v1',
349
351
  url: state?.url,
@@ -1093,7 +1095,7 @@ async function extractComputedStyleExtension(unifiedSession, selector, text, xpa
1093
1095
  * 在 extract 操作前轮询 find(),直到找到匹配元素或超时,
1094
1096
  * 用于实现 extract 的 timeout 参数语义
1095
1097
  */
1096
- async function waitForTargetExtension(unifiedSession, target, timeout) {
1098
+ async function waitForTargetExtension(unifiedSession, target, timeout, frame) {
1097
1099
  if ('x' in target && 'y' in target) {
1098
1100
  return;
1099
1101
  }
@@ -1102,20 +1104,31 @@ async function waitForTargetExtension(unifiedSession, target, timeout) {
1102
1104
  const { selector, text, xpath, nth: nthParam } = targetToFindParams(target);
1103
1105
  const nth = nthParam ?? 0;
1104
1106
  let lastError = null;
1107
+ let matchCount = 0;
1108
+ let candidates = [];
1105
1109
  while (true) {
1106
1110
  const elapsed = Date.now() - startTime;
1107
1111
  if (elapsed >= timeout) {
1108
- const msg = `等待目标元素超时 (${timeout}ms)`;
1109
- throw new Error(lastError ? `${msg}: ${lastError.message}` : msg);
1112
+ throw new TargetTimeoutError(await buildTargetDiagnostics(unifiedSession, target, {
1113
+ nth,
1114
+ timeout,
1115
+ frame,
1116
+ matchCount,
1117
+ lastState: 'attached',
1118
+ lastError,
1119
+ candidates,
1120
+ }));
1110
1121
  }
1122
+ const remaining = timeout - elapsed;
1111
1123
  if (!unifiedSession.isExtensionConnected()) {
1112
1124
  lastError = new Error('Extension 未连接');
1113
- await new Promise((r) => setTimeout(r, retryDelay));
1125
+ await new Promise((resolve) => setTimeout(resolve, Math.min(retryDelay, remaining)));
1114
1126
  continue;
1115
1127
  }
1116
1128
  try {
1117
- const remaining = timeout - elapsed;
1118
1129
  const elements = await unifiedSession.find(selector, text, xpath, remaining);
1130
+ matchCount = elements.length;
1131
+ candidates = elements;
1119
1132
  if (elements.length > nth) {
1120
1133
  return;
1121
1134
  }
@@ -1125,12 +1138,18 @@ async function waitForTargetExtension(unifiedSession, target, timeout) {
1125
1138
  if (err instanceof Error &&
1126
1139
  /Request timeout|Failed to send|disconnect|未连接|stopped|replaced/i.test(err.message)) {
1127
1140
  lastError = err;
1128
- await new Promise((r) => setTimeout(r, retryDelay));
1141
+ const retryRemaining = timeout - (Date.now() - startTime);
1142
+ if (retryRemaining > 0) {
1143
+ await new Promise((resolve) => setTimeout(resolve, Math.min(retryDelay, retryRemaining)));
1144
+ }
1129
1145
  continue;
1130
1146
  }
1131
1147
  throw err;
1132
1148
  }
1133
- await new Promise((r) => setTimeout(r, retryDelay));
1149
+ const retryRemaining = timeout - (Date.now() - startTime);
1150
+ if (retryRemaining > 0) {
1151
+ await new Promise((resolve) => setTimeout(resolve, Math.min(retryDelay, retryRemaining)));
1152
+ }
1134
1153
  }
1135
1154
  }
1136
1155
  /**