benchmark-collector 1.0.2 → 1.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.
package/README.md CHANGED
@@ -1,14 +1,15 @@
1
1
  # Benchmark Collector
2
2
 
3
- 基于 Playwright 的 Web Agent Benchmark 数据采集工具。录制用户在浏览器中的操作,同时采集截图、SoM(Set-of-Mark)标注、DOM 结构和 Playwright 脚本,用于算法训练和基线测评。
3
+ 基于 Playwright 的 Web Agent Benchmark 数据采集工具。录制用户在浏览器中的操作,同时采集截图、SoM(Set-of-Mark)标注、DOM 结构、对话消息和 Playwright 脚本,用于算法训练和基线测评。
4
4
 
5
5
  ## 特性
6
6
 
7
7
  - **Codegen 录制** — 基于 Playwright Codegen API,自动记录用户操作生成可回放脚本
8
8
  - **SoM 标注截图** — 自动识别页面可交互元素,生成带彩色编号标注的截图
9
9
  - **零闪烁采集** — 使用 CDP 直接截图 + Runtime.evaluate,不触发 Playwright 内部钩子
10
- - **DPR 自适应**动态计算缩放比,Mac Retina / Windows 各种缩放比例均能正确对齐
11
- - **页面跳转追踪**自动记录导航事件和新页面(popup)
10
+ - **Cookie 自动注入**从本地 Chrome 提取并解密 Cookie,保留登录态(支持 macOS / Windows / Linux)
11
+ - **对话采集**支持采集客服系统中的对话消息
12
+ - **长时间录制优化** — 写入节流、原子保存、CDP 自动清理,支持数小时连续采集
12
13
  - **增量保存** — 每步操作实时保存,进程异常退出也不丢数据
13
14
  - **跨平台** — 支持 macOS / Windows / Linux
14
15
 
@@ -29,26 +30,54 @@ npm install benchmark-collector
29
30
  ### CLI 方式
30
31
 
31
32
  ```bash
33
+ # 基本用法(自动提取本地 Chrome Cookie 保留登录态)
32
34
  benchmark-collect --task "处理退款" --url "https://mms.pinduoduo.com"
35
+
36
+ # 采集客服对话(指定对话容器选择器)
37
+ benchmark-collect --task "客服对话" --url "https://im.jinritemai.com/pc_seller_v2/main/workspace" --chat-selector ".msg-list"
38
+
39
+ # 跳过 Cookie 注入(未登录状态)
40
+ benchmark-collect --task "测试" --url "https://www.example.com" --no-cookie
41
+
42
+ # 开启 Trace 录制(⚠️ 长时间采集可能产生大文件)
43
+ benchmark-collect --task "测试" --url "https://www.example.com" --trace
33
44
  ```
34
45
 
35
46
  参数说明:
36
- - `--task` — 任务名称,用于目录命名(默认:`未命名任务`)
37
- - `--url` 起始 URL(默认:`https://www.example.com`)
47
+
48
+ | 参数 | 说明 | 默认值 |
49
+ |------|------|--------|
50
+ | `--task` | 任务名称,用于目录命名 | `未命名任务` |
51
+ | `--url` | 起始 URL | `https://www.example.com` |
52
+ | `--chat-selector` | 对话容器的 CSS 选择器 | 自动检测 |
53
+ | `--no-cookie` | 跳过本地 Chrome Cookie 注入 | 默认注入 |
54
+ | `--trace` | 开启 Playwright Trace 录制 | 默认关闭 |
38
55
 
39
56
  启动后浏览器会自动打开,**手动操作页面**,所有操作会被实时录制。操作完成后按 `Ctrl+C` 结束采集。
40
57
 
41
- > **⚠️ 注意:** 请使用 `Ctrl+C` 结束采集,不要手动关闭浏览器窗口,否则 trace.zip 将无法保存。
58
+ ### Cookie 自动注入
59
+
60
+ 工具默认会从本地 Chrome 浏览器提取目标站点的 Cookie 并注入,实现免登录采集。
61
+
62
+ - **macOS**: 通过 Keychain 获取加密密钥,支持 Chrome 127+ 新版加密格式
63
+ - **Windows**: 通过 DPAPI + AES-256-GCM 解密
64
+ - **Linux**: 通过 Secret Service 或 PBKDF2 解密
65
+
66
+ 跨域自动注入:当页面跳转到不同域名时,会自动提取并注入新域名的 Cookie。
67
+
68
+ > 如果 Cookie 提取失败(权限不足、Chrome 未安装等),工具会静默降级为未登录状态继续采集。
42
69
 
43
70
  ### API 方式
44
71
 
45
72
  ```typescript
46
73
  import { BenchmarkCollector } from 'benchmark-collector';
47
74
 
48
- const collector = new BenchmarkCollector('处理退款', 'https://mms.pinduoduo.com');
75
+ const collector = new BenchmarkCollector('处理退款', 'https://mms.pinduoduo.com', 'output', {
76
+ chatSelector: '.msg-list', // 可选:对话选择器
77
+ noCookie: false, // 可选:跳过 Cookie 注入
78
+ trace: false, // 可选:开启 Trace
79
+ });
49
80
  await collector.start();
50
- // 用户操作完成后
51
- await collector.stop();
52
81
  ```
53
82
 
54
83
  ## 输出产物
@@ -59,13 +88,14 @@ await collector.stop();
59
88
  output/处理退款_2026-03-22T10-00-00/
60
89
  ├── session.json # 完整会话记录(元数据 + 所有步骤)
61
90
  ├── recorded-script.js # 可直接 node 执行的 Playwright 回放脚本
62
- ├── trace.zip # Playwright Trace 文件
91
+ ├── trace.zip # Playwright Trace 文件(仅 --trace 模式)
63
92
  └── steps/
64
- ├── step_0000_clean.png # 纯净截图
65
- ├── step_0000_som.png # SoM 标注截图
66
- ├── step_0000_elements.json # 可交互元素列表
67
- ├── step_0000_dom.html # DOM 结构快照
68
- ├── step_0001_clean.png
93
+ ├── 0000_clean.png # 纯净截图
94
+ ├── 0000_som.png # SoM 标注截图
95
+ ├── 0000_elements.json # 可交互元素列表
96
+ ├── 0000_dom.html # DOM 结构快照
97
+ ├── 0000_conversation.json # 对话消息(有新消息时保存)
98
+ ├── 0001_clean.png
69
99
  └── ...
70
100
  ```
71
101
 
@@ -75,37 +105,23 @@ output/处理退款_2026-03-22T10-00-00/
75
105
  |------|------|------|
76
106
  | `session.json` | 会话元数据、每步的 action / selector / timestamp / URL | 训练数据主文件 |
77
107
  | `recorded-script.js` | Codegen 原始代码片段(干净的操作序列) | 算法训练 action 数据、集成到测试框架 |
78
- | `trace.zip` | Playwright Trace | `npx playwright show-trace trace.zip` 可视化回放 |
108
+ | `trace.zip` | Playwright Trace(仅 `--trace` 模式) | `npx playwright show-trace trace.zip` 可视化回放 |
79
109
  | `*_clean.png` | 纯净页面截图 | 视觉模型输入 |
80
110
  | `*_som.png` | SoM 标注截图(彩色编号框标记可交互元素) | 视觉 grounding 训练 |
81
111
  | `*_elements.json` | 可交互元素列表(tag / role / text / bbox / attributes) | 结构化 grounding 数据 |
82
112
  | `*_dom.html` | 页面 DOM 快照 | DOM-based agent 训练 |
83
-
84
- ### elements.json 示例
85
-
86
- ```json
87
- [
88
- {
89
- "index": 0,
90
- "tag": "button",
91
- "role": "button",
92
- "text": "同意退款",
93
- "bbox": { "x": 520, "y": 340, "width": 120, "height": 36 },
94
- "attributes": { "class": "btn-primary", "data-action": "approve" }
95
- }
96
- ]
97
- ```
113
+ | `*_conversation.json` | 对话消息(角色 / 内容 / 时间戳) | 客服对话训练数据 |
98
114
 
99
115
  ## 回放与调试
100
116
 
101
117
  ```bash
102
- # 回放录制的操作(自动处理 popup 页面)
118
+ # 回放录制的操作
103
119
  benchmark-replay output/处理退款_2026-03-22T10-00-00
104
120
 
105
121
  # 本地开发时
106
122
  npx ts-node scripts/replay.ts output/处理退款_2026-03-22T10-00-00
107
123
 
108
- # 可视化查看 Trace(操作时间线、截图、DOM 快照,推荐)
124
+ # 可视化查看 Trace(需 --trace 模式采集)
109
125
  npx playwright show-trace output/处理退款_2026-03-22T10-00-00/trace.zip
110
126
  ```
111
127
 
@@ -7,12 +7,28 @@ function getArg(name, defaultValue) {
7
7
  const idx = args.indexOf(`--${name}`);
8
8
  return idx >= 0 && args[idx + 1] ? args[idx + 1] : defaultValue;
9
9
  }
10
+ function hasFlag(name) {
11
+ return args.includes(`--${name}`);
12
+ }
10
13
  const task = getArg('task', '未命名任务');
11
14
  const url = getArg('url', 'https://www.example.com');
15
+ const chatSelector = getArg('chat-selector', '');
16
+ const noCookie = hasFlag('no-cookie');
17
+ const trace = hasFlag('trace');
12
18
  console.log(`Benchmark 数据采集器`);
13
19
  console.log(` 任务: ${task}`);
14
20
  console.log(` URL: ${url}`);
15
- const collector = new collector_1.BenchmarkCollector(task, url);
21
+ if (chatSelector)
22
+ console.log(` 对话选择器: ${chatSelector}`);
23
+ if (noCookie)
24
+ console.log(` 模式: 跳过 Cookie 注入`);
25
+ if (trace)
26
+ console.log(` Trace: 开启(⚠️ 长时间采集可能产生大文件)`);
27
+ const collector = new collector_1.BenchmarkCollector(task, url, 'output', {
28
+ chatSelector: chatSelector || undefined,
29
+ noCookie,
30
+ trace,
31
+ });
16
32
  collector.start().catch((err) => {
17
33
  console.error('采集出错:', err);
18
34
  process.exit(1);
@@ -16,7 +16,16 @@ export declare class BenchmarkCollector {
16
16
  private processing;
17
17
  private queueDone;
18
18
  private queueDoneResolve;
19
- constructor(task: string, startUrl: string, outputBase?: string);
19
+ private chatSelector?;
20
+ private lastMessageCount;
21
+ private noCookie;
22
+ private injectedCookieDomains;
23
+ private enableTrace;
24
+ constructor(task: string, startUrl: string, outputBase?: string, options?: {
25
+ chatSelector?: string;
26
+ noCookie?: boolean;
27
+ trace?: boolean;
28
+ });
20
29
  get sessionId(): string;
21
30
  get outputPath(): string;
22
31
  get steps(): StepRecord[];
@@ -31,6 +40,11 @@ export declare class BenchmarkCollector {
31
40
  }>;
32
41
  /** 手动触发一次采集 */
33
42
  manualCapture(actionName: string, detail?: string): Promise<void>;
43
+ /**
44
+ * 按 URL 提取并注入 Cookie。
45
+ * 自动去重:同一根域名只提取一次(避免重复调用 Python 脚本)。
46
+ */
47
+ private injectCookiesForUrl;
34
48
  private setupRecording;
35
49
  private enqueueCapture;
36
50
  private processQueue;
@@ -44,7 +58,17 @@ export declare class BenchmarkCollector {
44
58
  /** 通过 CDP 执行 JS(不触发 codegen 钩子,零闪烁) */
45
59
  private cdpEval;
46
60
  private captureStep;
61
+ private lastSaveTime;
62
+ private savePending;
63
+ private static readonly SAVE_THROTTLE_MS;
64
+ /**
65
+ * 节流 + 原子写入:
66
+ * - 节流:高频操作时最多每秒写一次 session.json,减少 IO 压力
67
+ * - 原子写入:先写 .tmp 再 rename,防止 Ctrl+C 导致文件损坏
68
+ */
47
69
  private saveSessionSync;
70
+ /** 强制立即保存(用于退出时,跳过节流) */
71
+ private forceSaveSessionSync;
48
72
  stop(browserDisconnected?: boolean): Promise<void>;
49
73
  }
50
74
  //# sourceMappingURL=collector.d.ts.map
@@ -37,10 +37,12 @@ exports.BenchmarkCollector = void 0;
37
37
  const playwright_core_1 = require("playwright-core");
38
38
  const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
+ const cookie_extract_1 = require("./cookie-extract");
40
41
  const dom_capture_1 = require("./dom-capture");
41
42
  const som_annotator_1 = require("./som-annotator");
43
+ const conversation_capture_1 = require("./conversation-capture");
42
44
  class BenchmarkCollector {
43
- constructor(task, startUrl, outputBase = 'output') {
45
+ constructor(task, startUrl, outputBase = 'output', options) {
44
46
  this.task = task;
45
47
  this.startUrl = startUrl;
46
48
  this.stepCounter = 0;
@@ -53,6 +55,19 @@ class BenchmarkCollector {
53
55
  this.processing = false;
54
56
  this.queueDone = Promise.resolve();
55
57
  this.queueDoneResolve = null;
58
+ this.lastMessageCount = 0;
59
+ // 是否跳过 Cookie 注入
60
+ this.noCookie = false;
61
+ // 已注入过 Cookie 的域名集合(避免重复提取)
62
+ this.injectedCookieDomains = new Set();
63
+ // 是否开启 trace 录制(默认关闭,--trace 开启)
64
+ this.enableTrace = false;
65
+ // ========== 数据保存 ==========
66
+ this.lastSaveTime = 0;
67
+ this.savePending = false;
68
+ this.chatSelector = options?.chatSelector;
69
+ this.noCookie = options?.noCookie ?? false;
70
+ this.enableTrace = options?.trace ?? false;
56
71
  const safeName = task.replace(/[^\w\u4e00-\u9fff-]/g, '_').replace(/_+/g, '_').substring(0, 50);
57
72
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
58
73
  const sessionId = `${safeName}_${timestamp}`;
@@ -65,7 +80,6 @@ class BenchmarkCollector {
65
80
  startUrl,
66
81
  startTime: new Date().toISOString(),
67
82
  steps: [],
68
- codegenScript: '',
69
83
  traceFile: '',
70
84
  };
71
85
  }
@@ -87,14 +101,18 @@ class BenchmarkCollector {
87
101
  };
88
102
  process.on('SIGINT', sigintHandler);
89
103
  const exitHandler = () => { try {
90
- this.saveSessionSync();
104
+ this.forceSaveSessionSync();
91
105
  }
92
106
  catch (_) { } };
93
107
  process.on('exit', exitHandler);
94
- // 优先用系统 Chrome(channel:'chrome'),找不到再回退 Playwright 自带 Chromium
95
108
  // handleSIGINT/SIGTERM/SIGHUP: false — 防止 Playwright 在 Ctrl+C 时自动关闭浏览器
96
109
  // 我们需要先保存 trace.zip,再手动关闭浏览器
97
- const launchOpts = { headless: false, handleSIGINT: false, handleSIGTERM: false, handleSIGHUP: false };
110
+ const launchOpts = {
111
+ headless: false,
112
+ handleSIGINT: false,
113
+ handleSIGTERM: false,
114
+ handleSIGHUP: false,
115
+ };
98
116
  let browser;
99
117
  try {
100
118
  browser = await playwright_core_1.chromium.launch({ ...launchOpts, channel: 'chrome' });
@@ -105,7 +123,13 @@ class BenchmarkCollector {
105
123
  this.context = await browser.newContext({
106
124
  viewport: { width: 1280, height: 720 },
107
125
  });
108
- await this.context.tracing.start({ screenshots: true, snapshots: true });
126
+ // 默认从本地 Chrome 提取 Cookie 注入(除非 --no-cookie)
127
+ if (!this.noCookie) {
128
+ await this.injectCookiesForUrl(this.startUrl);
129
+ }
130
+ if (this.enableTrace) {
131
+ await this.context.tracing.start({ screenshots: true, snapshots: true });
132
+ }
109
133
  this.activePage = await this.context.newPage();
110
134
  await this.setupRecording();
111
135
  try {
@@ -125,13 +149,15 @@ class BenchmarkCollector {
125
149
  await this.waitForQueueDrain();
126
150
  console.log(`\n✅ 采集已启动,请在浏览器中操作`);
127
151
  console.log(` 任务: ${this.task}`);
128
- console.log(` 按 Ctrl+C 结束采集(⚠️ 请勿手动关闭浏览器,否则 trace 会丢失)\n`);
152
+ if (this.noCookie)
153
+ console.log(` 模式: 无 Cookie(未登录)`);
154
+ console.log(` 按 Ctrl+C 结束采集\n`);
129
155
  let browserDisconnected = false;
130
156
  await new Promise((resolve) => {
131
157
  sigintResolve = resolve;
132
158
  browser.on('disconnected', () => {
133
159
  browserDisconnected = true;
134
- console.log('\n⚠️ 浏览器已断开连接,trace.zip 将无法保存');
160
+ console.log('\n⚠️ 浏览器已断开连接' + (this.enableTrace ? ',trace.zip 将无法保存' : ''));
135
161
  resolve();
136
162
  });
137
163
  });
@@ -150,7 +176,9 @@ class BenchmarkCollector {
150
176
  this.context = await browser.newContext({
151
177
  viewport: { width: 1280, height: 720 },
152
178
  });
153
- await this.context.tracing.start({ screenshots: true, snapshots: true });
179
+ if (this.enableTrace) {
180
+ await this.context.tracing.start({ screenshots: true, snapshots: true });
181
+ }
154
182
  this.activePage = await this.context.newPage();
155
183
  await this.setupRecording();
156
184
  return { browser, context: this.context, page: this.activePage };
@@ -165,6 +193,53 @@ class BenchmarkCollector {
165
193
  });
166
194
  await this.waitForQueueDrain();
167
195
  }
196
+ // ========== Cookie 注入 ==========
197
+ /**
198
+ * 按 URL 提取并注入 Cookie。
199
+ * 自动去重:同一根域名只提取一次(避免重复调用 Python 脚本)。
200
+ */
201
+ async injectCookiesForUrl(url) {
202
+ if (this.noCookie)
203
+ return;
204
+ try {
205
+ const hostname = new URL(url).hostname;
206
+ // 取根域名作为去重 key(如 im.jinritemai.com → jinritemai.com)
207
+ const parts = hostname.split('.');
208
+ const rootDomain = parts.length >= 2 ? parts.slice(-2).join('.') : hostname;
209
+ if (this.injectedCookieDomains.has(rootDomain))
210
+ return;
211
+ this.injectedCookieDomains.add(rootDomain);
212
+ console.log(` 🍪 从本地 Chrome 提取 Cookie (${hostname})...`);
213
+ const cookies = (0, cookie_extract_1.extractCookiesForUrl)(url);
214
+ if (cookies.length > 0) {
215
+ // 逐条注入,跳过字段非法的 cookie,避免一条坏数据导致全部失败
216
+ let injected = 0;
217
+ let skipped = 0;
218
+ for (const cookie of cookies) {
219
+ try {
220
+ await this.context.addCookies([cookie]);
221
+ injected++;
222
+ }
223
+ catch (err) {
224
+ skipped++;
225
+ if (skipped <= 3) {
226
+ // 前 3 条失败的 cookie 打印详情,方便排查
227
+ console.log(` ❌ 跳过无效 Cookie: name=${cookie.name}, domain=${cookie.domain}, ` +
228
+ `sameSite=${cookie.sameSite}, secure=${cookie.secure}, ` +
229
+ `expires=${cookie.expires}, value.length=${cookie.value?.length ?? 0}`);
230
+ }
231
+ }
232
+ }
233
+ console.log(` ✅ 已注入 ${injected}/${cookies.length} 个 Cookie (${hostname})`);
234
+ }
235
+ else {
236
+ console.log(` ⚠️ 未找到 ${hostname} 的 Cookie`);
237
+ }
238
+ }
239
+ catch (e) {
240
+ console.log(` ⚠️ Cookie 提取失败: ${e.message?.split('\n')[0] || e}`);
241
+ }
242
+ }
168
243
  // ========== 录制设置 ==========
169
244
  async setupRecording() {
170
245
  // 1. Codegen API — 与 codegen 完全一致的操作记录
@@ -206,7 +281,7 @@ class BenchmarkCollector {
206
281
  console.log(` [Signal] ${data.name || JSON.stringify(data)}`);
207
282
  },
208
283
  });
209
- // 2. 页面跳转记录
284
+ // 2. 页面跳转记录 + 跨域 Cookie 自动注入
210
285
  const trackNavigation = (p) => {
211
286
  let lastUrl = p.url();
212
287
  p.on('framenavigated', (frame) => {
@@ -214,6 +289,8 @@ class BenchmarkCollector {
214
289
  return;
215
290
  const newUrl = p.url();
216
291
  if (newUrl && newUrl !== lastUrl && newUrl !== 'about:blank') {
292
+ // 跨域时自动注入新域名的 Cookie(异步,不阻塞录制)
293
+ this.injectCookiesForUrl(newUrl).catch(() => { });
217
294
  const code = `await page.goto('${newUrl}');`;
218
295
  this.allCodeLines.push(code);
219
296
  this.enqueueCapture({
@@ -227,10 +304,14 @@ class BenchmarkCollector {
227
304
  });
228
305
  };
229
306
  trackNavigation(this.activePage);
230
- // 3. 新页面跟踪(popup 等)
307
+ // 3. 新页面跟踪(popup 等)+ 跨域 Cookie 自动注入
231
308
  this.context.on('page', (newPage) => {
232
309
  const url = newPage.url();
233
310
  console.log(` [Page] 新页面打开: ${url}`);
311
+ // 新页面可能是不同域名,自动注入 Cookie
312
+ if (url && url !== 'about:blank') {
313
+ this.injectCookiesForUrl(url).catch(() => { });
314
+ }
234
315
  // 记录新 tab 打开事件
235
316
  const code = `// New page opened: ${url}`;
236
317
  this.allCodeLines.push(code);
@@ -280,6 +361,13 @@ class BenchmarkCollector {
280
361
  }
281
362
  /** 获取或创建页面的 CDP session(自动处理失效重建) */
282
363
  async getCDP(page) {
364
+ // 顺便清理已关闭页面的 CDP session,防止长时间运行时泄漏
365
+ for (const [p, s] of this.cdpSessionMap) {
366
+ if (p.isClosed()) {
367
+ this.cdpSessionMap.delete(p);
368
+ s.detach().catch(() => { });
369
+ }
370
+ }
283
371
  let cdp = this.cdpSessionMap.get(page);
284
372
  if (cdp) {
285
373
  try {
@@ -370,7 +458,22 @@ class BenchmarkCollector {
370
458
  const somBase64 = await this.cdpEval(cdp, somScript);
371
459
  const somBuffer = Buffer.from(somBase64, 'base64');
372
460
  fs.writeFileSync(path.join(this.stepsDir, somPath), somBuffer);
373
- // 记录
461
+ // 对话采集(有新消息时才保存)
462
+ let conversationField;
463
+ try {
464
+ const convJson = await this.cdpEval(cdp, (0, conversation_capture_1.getConversationScript)(this.chatSelector));
465
+ const convData = JSON.parse(convJson);
466
+ if (convData.messageCount > 0 && convData.messageCount !== this.lastMessageCount) {
467
+ const convPath = `${prefix}_conversation.json`;
468
+ fs.writeFileSync(path.join(this.stepsDir, convPath), JSON.stringify(convData, null, 2));
469
+ conversationField = { messages: convPath };
470
+ this.lastMessageCount = convData.messageCount;
471
+ }
472
+ }
473
+ catch (_) {
474
+ // 对话采集失败不影响主流程
475
+ }
476
+ // ⑥ 记录
374
477
  const step = {
375
478
  stepId,
376
479
  action: {
@@ -386,6 +489,7 @@ class BenchmarkCollector {
386
489
  pageUrl: page.url(),
387
490
  screenshots: { clean: cleanPath, som: somPath },
388
491
  dom: { html: htmlPath, interactiveElements: elementsPath },
492
+ ...(conversationField ? { conversation: conversationField } : {}),
389
493
  };
390
494
  this.session.steps.push(step);
391
495
  this.saveSessionSync();
@@ -393,35 +497,63 @@ class BenchmarkCollector {
393
497
  `${step.action.selector ? ' → ' + step.action.selector : ''}` +
394
498
  `${step.action.text ? ' "' + step.action.text + '"' : ''}`);
395
499
  }
396
- // ========== 数据保存 ==========
500
+ /**
501
+ * 节流 + 原子写入:
502
+ * - 节流:高频操作时最多每秒写一次 session.json,减少 IO 压力
503
+ * - 原子写入:先写 .tmp 再 rename,防止 Ctrl+C 导致文件损坏
504
+ */
397
505
  saveSessionSync() {
506
+ const now = Date.now();
507
+ if (now - this.lastSaveTime < BenchmarkCollector.SAVE_THROTTLE_MS) {
508
+ // 标记有待写入,确保最终会被写入
509
+ if (!this.savePending) {
510
+ this.savePending = true;
511
+ setTimeout(() => {
512
+ this.savePending = false;
513
+ this.saveSessionSync();
514
+ }, BenchmarkCollector.SAVE_THROTTLE_MS);
515
+ }
516
+ return;
517
+ }
518
+ this.lastSaveTime = now;
519
+ this.savePending = false;
398
520
  try {
399
- this.session.codegenScript = this.allCodeLines.join('\n');
400
- fs.writeFileSync(path.join(this.outputDir, 'session.json'), JSON.stringify(this.session, null, 2));
401
- // 保留干净的 codegen 原始代码(不注入 replay 逻辑)
402
- fs.writeFileSync(path.join(this.outputDir, 'recorded-script.js'), this.session.codegenScript);
521
+ // 原子写入 session.json:写 tmp → rename
522
+ const sessionPath = path.join(this.outputDir, 'session.json');
523
+ const tmpPath = sessionPath + '.tmp';
524
+ fs.writeFileSync(tmpPath, JSON.stringify(this.session, null, 2));
525
+ fs.renameSync(tmpPath, sessionPath);
526
+ // recorded-script.js 单独保存完整的 codegen 脚本
527
+ fs.writeFileSync(path.join(this.outputDir, 'recorded-script.js'), this.allCodeLines.join('\n'));
403
528
  }
404
529
  catch (_) { }
405
530
  }
531
+ /** 强制立即保存(用于退出时,跳过节流) */
532
+ forceSaveSessionSync() {
533
+ this.lastSaveTime = 0;
534
+ this.saveSessionSync();
535
+ }
406
536
  async stop(browserDisconnected = false) {
407
537
  this.stopped = true;
408
538
  console.log(' ⏳ 等待队列排空...');
409
539
  await Promise.race([
410
540
  this.waitForQueueDrain(),
411
- new Promise(r => setTimeout(r, 3000)),
541
+ new Promise(r => setTimeout(r, 10000)), // 长时间采集后队列可能有积压
412
542
  ]);
413
543
  this.session.endTime = new Date().toISOString();
414
544
  if (!browserDisconnected) {
415
- // 保存 trace(加 10 秒超时)
416
- console.log(' ⏳ 保存 trace...');
417
- this.session.traceFile = 'trace.zip';
418
- try {
419
- await this.withTimeout(this.context.tracing.stop({ path: path.join(this.outputDir, 'trace.zip') }), 10000, 'tracing.stop');
420
- console.log('trace.zip 已保存');
421
- }
422
- catch (e) {
423
- console.log(` ⚠️ trace 保存失败: ${e.message?.split('\n')[0] || e}`);
424
- this.session.traceFile = '';
545
+ // 保存 trace(仅在 --trace 模式下)
546
+ if (this.enableTrace) {
547
+ console.log(' ⏳ 保存 trace...');
548
+ this.session.traceFile = 'trace.zip';
549
+ try {
550
+ await this.withTimeout(this.context.tracing.stop({ path: path.join(this.outputDir, 'trace.zip') }), 60000, 'tracing.stop');
551
+ console.log(' ✅ trace.zip 已保存');
552
+ }
553
+ catch (e) {
554
+ console.log(` ⚠️ trace 保存失败: ${e.message?.split('\n')[0] || e}`);
555
+ this.session.traceFile = '';
556
+ }
425
557
  }
426
558
  // CDP 清理(加超时)
427
559
  for (const cdp of this.cdpSessionMap.values()) {
@@ -433,11 +565,12 @@ class BenchmarkCollector {
433
565
  else {
434
566
  this.session.traceFile = '';
435
567
  }
436
- this.saveSessionSync();
568
+ this.forceSaveSessionSync();
437
569
  console.log(`\n✅ 采集完成`);
438
570
  console.log(` 共 ${this.session.steps.length} 步操作`);
439
571
  console.log(` 数据目录: ${this.outputDir}/`);
440
572
  }
441
573
  }
442
574
  exports.BenchmarkCollector = BenchmarkCollector;
575
+ BenchmarkCollector.SAVE_THROTTLE_MS = 1000; // 最多每秒写一次
443
576
  //# sourceMappingURL=collector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/collector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAiE;AACjE,uCAAyB;AACzB,2CAA6B;AAC7B,+CAAiD;AACjD,mDAAqD;AAWrD,MAAa,kBAAkB;IAiB7B,YAAoB,IAAY,EAAU,QAAgB,EAAE,UAAU,GAAG,QAAQ;QAA7D,SAAI,GAAJ,IAAI,CAAQ;QAAU,aAAQ,GAAR,QAAQ,CAAQ;QAblD,gBAAW,GAAG,CAAC,CAAC;QAChB,iBAAY,GAAa,EAAE,CAAC;QAG5B,YAAO,GAAG,KAAK,CAAC;QACxB,iBAAiB;QACT,kBAAa,GAAG,IAAI,GAAG,EAAa,CAAC;QAC7C,8BAA8B;QACtB,iBAAY,GAAkB,EAAE,CAAC;QACjC,eAAU,GAAG,KAAK,CAAC;QACnB,cAAS,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7C,qBAAgB,GAAwB,IAAI,CAAC;QAGnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChG,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,GAAG;YACb,SAAS;YACT,IAAI;YACJ,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,EAAE;YACT,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1C,KAAK,CAAC,KAAK;QACT,IAAI,aAAa,GAAwB,IAAI,CAAC;QAC9C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,OAAO,CAAC,+BAA+B;YACzC,CAAC;YACD,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,IAAI,aAAa;gBAAE,aAAa,EAAE,CAAC;QACrC,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;YAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEhC,+DAA+D;QAC/D,uEAAuE;QACvE,6BAA6B;QAC7B,MAAM,UAAU,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACvG,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,0BAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,MAAM,0BAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACtC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;SACvC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC;YAClB,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE;YAC7D,WAAW,EAAE,qBAAqB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE;YACzD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAE7D,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,aAAa,GAAG,OAAO,CAAC;YACxB,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;gBAC9B,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC7C,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,aAAa,CAAC,OAAgC;QAClD,MAAM,OAAO,GAAG,MAAM,0BAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACtC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;SACvC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACnE,CAAC;IAED,eAAe;IACf,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,MAAe;QACrD,IAAI,CAAC,cAAc,CAAC;YAClB,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;YACzC,WAAW,EAAE,cAAc,UAAU,IAAI,MAAM,IAAI,EAAE,EAAE;YACvD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,6BAA6B;IAErB,KAAK,CAAC,cAAc;QAC1B,uCAAuC;QACvC,MAAO,IAAI,CAAC,OAAe,CAAC,eAAe,CACzC,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,EAClE;YACE,WAAW,EAAE,CAAC,IAAU,EAAE,IAAS,EAAE,IAAY,EAAE,EAAE;gBACnD,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACzB,IAAI,IAAI;oBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,cAAc,CAAC;oBAClB,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,UAAU;oBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;YACD,aAAa,EAAE,CAAC,IAAU,EAAE,IAAS,EAAE,IAAY,EAAE,EAAE;gBACrD,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACzB,IAAI,IAAI;oBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACjC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACnE,QAAQ,CAAC,MAAM,GAAG;wBAChB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;wBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;wBAC9B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;wBACtB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;wBACpB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;wBAC9B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;qBACjC,CAAC;oBACF,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;oBACvD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,WAAW,EAAE,CAAC,KAAW,EAAE,IAAS,EAAE,EAAE;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;SACF,CACF,CAAC;QAEF,YAAY;QACZ,MAAM,eAAe,GAAG,CAAC,CAAO,EAAE,EAAE;YAClC,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACtB,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,SAAS,EAAE;oBAAE,OAAO;gBACpD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACvB,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;oBAC7D,MAAM,IAAI,GAAG,oBAAoB,MAAM,KAAK,CAAC;oBAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,CAAC,cAAc,CAAC;wBAClB,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;wBACzC,WAAW,EAAE,IAAI;wBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC,CAAC;oBACH,OAAO,GAAG,MAAM,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEjC,oBAAoB;QACpB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACtC,eAAe;YACf,MAAM,IAAI,GAAG,uBAAuB,GAAG,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC;gBAClB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE;gBACjC,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YACH,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAEvB,cAAc,CAAC,IAAiB;QACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAG,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACvC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,iCAAiC;IAEjC,mBAAmB;IACX,WAAW,CAAI,OAAmB,EAAE,EAAU,EAAE,KAAa;QACnE,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,OAAO;YACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/F,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IAC7B,KAAK,CAAC,MAAM,CAAC,IAAU;QAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CACpB,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EACtE,IAAI,EAAE,QAAQ,CACf,CAAC;gBACF,OAAO,GAAG,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAC1B,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,IAAI,EAAE,QAAQ,CACf,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,mCAAmC;IAC3B,KAAK,CAAC,iBAAiB,CAAC,GAAQ;QACtC,6BAA6B;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;YAC/D,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACtD,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;iBACnE,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QACd,kDAAkD;QAClD,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,uCAAuC;IAC/B,KAAK,CAAC,OAAO,CAAC,GAAQ,EAAE,UAAkB;QAChD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAChD,UAAU;YACV,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,gBAAgB,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAElC,KAAK,CAAC,WAAW,CAAC,IAAiB;QACzC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAChD,qCAAqC;QACrC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,4BAA4B;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC;QACnD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,WAAW,gBAAgB,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpC,+BAA+B;QAC/B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAE3C,oCAAoC;QACpC,MAAM,SAAS,GAAG,GAAG,MAAM,YAAY,CAAC;QACxC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC5D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;QAEnE,aAAa;QACb,MAAM,QAAQ,GAAG,GAAG,MAAM,WAAW,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;QAC3E,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAE3D,eAAe;QACf,MAAM,YAAY,GAAG,GAAG,MAAM,gBAAgB,CAAC;QAC/C,MAAM,YAAY,GAAW,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAA,8BAAgB,GAAE,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5F,4BAA4B;QAC5B,MAAM,OAAO,GAAG,GAAG,MAAM,UAAU,CAAC;QACpC,MAAM,SAAS,GAAG,IAAA,kCAAkB,EAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,SAAS,GAAW,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACnD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QAE/D,OAAO;QACP,MAAM,IAAI,GAAe;YACvB,MAAM;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;YACD,WAAW;YACX,SAAS;YACT,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACnB,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE;YAC/C,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE;SAC3D,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CACT,SAAS,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACtC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7D,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3D,CAAC;IACJ,CAAC;IAED,6BAA6B;IAErB,eAAe;QACrB,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CACtC,CAAC;YACF,oCAAoC;YACpC,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,CAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,KAAK;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACtC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,qBAAqB;YACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CACpB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,EAC3E,KAAK,EAAE,cAAc,CACtB,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;YAC9B,CAAC;YAED,cAAc;YACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC9C,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAO,IAAI,CAAC,OAAe,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF;AAlcD,gDAkcC"}
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ChatMessage } from './types';
2
+ /**
3
+ * 生成可通过 CDP Runtime.evaluate 执行的对话采集脚本。
4
+ *
5
+ * 策略:
6
+ * 1. 如果提供了 chatSelector,精确匹配该容器内的消息元素
7
+ * 2. 否则使用启发式规则自动检测常见客服系统的对话 DOM 结构
8
+ *
9
+ * 返回 JSON 字符串: { messageCount: number, messages: ChatMessage[] }
10
+ */
11
+ export declare function getConversationScript(chatSelector?: string): string;
12
+ /** 通过 page.evaluate 采集对话(用于测试等非 codegen 场景) */
13
+ export declare function collectConversation(page: import('playwright-core').Page, chatSelector?: string): Promise<{
14
+ messageCount: number;
15
+ messages: ChatMessage[];
16
+ }>;
17
+ //# sourceMappingURL=conversation-capture.d.ts.map