pageqa 0.5.1 → 0.7.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
@@ -222,6 +222,40 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
222
222
 
223
223
  未识别的占位符(如 `${PATH}`)原样保留,不会被替换。完整示例:`examples/plm-product-bom.md`。
224
224
 
225
+ ### 回放脚本(零模型重跑同一用例)
226
+
227
+ 一条用例被 LLM 跑通一次后,它的操作序列就确定了。加 `--emit-script` 可以把这次的成功操作固化成**回放脚本**,之后用 `--replay` 零模型重跑:不再调用任何大模型,秒级完成,也不必再配置 LLM 端点。适合把「先用模型跑通一次、之后每天用脚本回归」接进 CI。
228
+
229
+ ```bash
230
+ # 1) 先用 LLM 跑通一次,并生成脚本(不给路径时写到源用例同目录 examples/smoke.replay.json)
231
+ pageqa --emit-script examples/smoke.md
232
+
233
+ # 2) 之后每次零模型回放
234
+ pageqa --replay examples/smoke.replay.json
235
+ pageqa --replay examples/smoke.replay.json --json # 机器可读报告,接 CI
236
+ pageqa --replay examples/smoke.replay.json --semantic # 断言改用 Jev 语义判断
237
+ ```
238
+
239
+ 要点:
240
+
241
+ - **不存 `@eN`**:bsk 的 `@eN` 只在产生它的那次快照内有效,回放时编号会重排。脚本里存的是**语义定位符**(角色 + 可访问名 + 同名序号),回放时用当次快照重新解析,因此页面小幅调整(改文案、加前后缀、换节点类型)后通常仍能命中;解析不到时退回录制时的 target(是 CSS 就还能用),两者都失败就明确报错,而不是猜一个「最像的」元素——点错元素制造的是假通过。
242
+ - **占位符保持可复用**:`自动化测试产品${timestamp}` 会以占位符形式写进脚本——包括**定位符里的名字**(列表里点「刚创建的那条」时,名字里同样带时间戳)与用例原文;回放时重新展开(同一次回放共用一个时刻),所以「创建 xxx${timestamp}」这类用例可以反复回放而不撞名。模型若自己编了值(没沿用占位符),则按录制当次的具体值冻结。
243
+ - **旧脚本会自愈**:早期版本生成的脚本可能在定位符名或用例原文里残留录制当次的具体取值。脚本自带 `recordedValue` / `recordedExpectation` 作为证据,因此 `--replay` 加载时会据此把这些写死的取值还原成占位符(会打印一行「已把脚本里写死的录制取值还原为占位符」),**不必为一个字段重跑一次十几分钟的 LLM 用例**。本地文件路径(`upload` 的 `file`)与 `target`/`url` 刻意不改写。
244
+ - **悬停触发的下拉菜单**:这类用例要写成「先悬停触发按钮、等菜单展开,再点菜单项」(agent 系统提示已内置该约定)。`hover` 会被正常录制与回放,脚本里能看到 `hover` 步骤;直接 click 触发按钮在回放时常常点不开菜单,或点到页面里另一个同名下拉(如详情页同时存在页面级与区域级的「操作」),导致后续步骤连锁失败。
245
+ - **同名元素靠祖先路径消歧**:定位符除「角色 + 可访问名 + 同名序号」外还记录**祖先路径**(如 `menu "Dropdown List"`、`tabpanel "结构"`)。页面里同名元素很多时(多个「操作」下拉、每行一个「删除」),「同名第几个」会随元素数量变化而指错,而「在哪个区域下」更抗漂移。路径名做过截断(长到 60 字符)与层数限制(只留最深 3 层),避免 `main` 这类整页文本混进来。
246
+ - **每步最多重试 3 次**(间隔 500ms,且每次重新取快照):对齐 bsk 侧时序抖动(如 `el-upload` 首次触发失败、重试即成功)与页面动画/弹窗延迟。
247
+ - **定位失败会说明原因**:报告区分三种情况——名字相近的元素存在(改名了)、该角色元素存在但名字都不同(多半点错了另一个同名菜单)、该角色元素一个都没有(菜单/弹窗并未打开)。
248
+ - **失败语义分三类**:
249
+ - **元素未找到 → 跳过并继续,不算失败**。实测教训:录制期模型常顺手点一下「取 消」这类补救动作(提交后弹窗没关,补点一下),回放时页面更顺利、弹窗早已关闭,那个按钮根本不存在。若按失败即停,一条 65 步的用例会在第 12 步整条报废、拿不到后面 53 步的任何信息。跳过会**显式列在报告里**(`跳过 N 步(元素未找到)` 与执行轨迹中的 `[replay-skip]`),不会被悄悄略过。
250
+ - **其它失败**(元素找到了但操作报错、断言不成立)→ 记为失败并**继续跑完**,一次拿到整条用例的完整健康报告;报告指出「回放第 n 步(kind)/对应用例第 k 步:<用例原文>」。退出码仍为非零,失败不会被吞掉。
251
+ - **navigate 失败** → 后续步骤没有意义,直接中止。
252
+ - 想回到「一失败就停」的旧行为:加 `--fail-fast`。
253
+ - **断言默认是字符串包含**:零模型回放不碰任何远端服务。若录制时启用了 Jev,模型可能给出语义化断言(如「检出成功」「标题包含 Example」),脚本会把这类断言标记为语义断言:回放**开始前**就提示脚本里有几条这类断言(字符串匹配可能误报),失败时再提示「可加 `--semantic` 重试」。
254
+ - **多场景**:一个脚本文件包含全部场景,逐个回放(各自独立 session 与浏览器窗口),任一场景失败则整体失败、退出码 `1`。
255
+ - **源用例变更**:脚本记录源用例内容哈希,回放时若源文件已改动会在 stderr 提示(只警告、不失败),提示你重新生成脚本。
256
+ - **PASS/FAIL 都会生成**:失败轨迹同样能导出,便于排查「模型这次到底做了什么」;但模型一步都没成功执行时脚本为空,回放会直接拒绝执行,不会伪装成「0 步全通过」。
257
+ - **输出路径写法**:`--emit-script ./replay`、`--emit-script reports/run1.json` 都可以(不必是 `.json` 结尾)。紧跟其后的 token 只有在「像路径」时才被当作输出路径——若它是 `.md`/`.txt` 或含空格的文本,则按用例输入处理,因此 `pageqa --emit-script examples/smoke.md` 也能正常工作。只接受一个用例输入,多给一个会直接报错。
258
+
225
259
  ### 运行进度日志
226
260
 
227
261
  长流程(建产品 → 建物料 → 检定 → 审批 …)单次可能跑十几分钟。为避免「终端没输出、不知道卡在哪一步」,pageqa 会把**带时间戳的进度日志实时输出到 stderr**(stdout 只保留最终报告,两者互不干扰):
@@ -259,6 +293,10 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
259
293
  | `--session <id>` | 指定已存在的 bsk session(默认自动创建) |
260
294
  | `--json` | 输出 JSON 报告 |
261
295
  | `--suite` | 强制按多场景套件运行 |
296
+ | `--emit-script [path]` | 运行结束后把成功操作固化成回放脚本(默认源用例同目录 `<用例名>.replay.json`;PASS/FAIL 都生成)。`path` 可选,写成路径形式(`./replay`、`reports/run1.json`;含空白用引号) |
297
+ | `--replay <file>` | 零模型回放已有脚本(不调用任何大模型) |
298
+ | `--semantic` | 回放时断言改用 Jev 语义判断(默认纯字符串匹配) |
299
+ | `--fail-fast` | 回放时任一失败(含元素未找到)即停止该场景;默认跑完剩余步骤 |
262
300
  | `--init-config` | 在用户目录创建/重置配置文件 |
263
301
  | `--out <file>` | 将报告写入文件 |
264
302
  | `--debug` | 显示调试日志(bsk 命令与耗时、快照体积、上下文裁剪、Jev 请求详情) |
@@ -309,6 +347,9 @@ pageqa examples/element-plus-upload.md
309
347
  └─> bsk 工具:navigate / snapshot / click / fill / upload / hover / scroll / wait / assert_text
310
348
  └─> 真实浏览器(bsk 连接)
311
349
  └─> 结论与证据 -> 报告(文本/JSON)+ 退出码
350
+ └─> --emit-script:录制成功操作 -> 回放脚本(*.replay.json)
351
+
352
+ 回放脚本 -> pageqa --replay -> bsk 操作层 -> 真实浏览器 -> 报告 + 退出码(全程不调用大模型)
312
353
  ```
313
354
 
314
355
  可用工具(`src/bsk/tools.ts`):
@@ -326,7 +367,7 @@ pageqa examples/element-plus-upload.md
326
367
 
327
368
  ```bash
328
369
  pnpm test # 端到端冒烟:需 bsk daemon 已连接浏览器 + LLM 端点可用
329
- pnpm run test:unit # 仅单元测试:不依赖浏览器与 LLM
370
+ pnpm run test:unit # 仅单元测试:不依赖浏览器与 LLM(报告解析 + 定位符/录制/回放脚本)
330
371
  ```
331
372
 
332
373
  冒烟测试覆盖:A1 打开+标题断言、A2 元素交互与断言、A3 失败可读原因与退出码、A4 文本/JSON 报告。需 bsk daemon 连接浏览器且 LLM 端点可用。
@@ -360,12 +401,16 @@ src/
360
401
  agent.ts 编排器(pi-agent-core Agent + bsk 工具 + 报告)
361
402
  llm.ts LLM 后端(pi-ai 自定义 provider -> 可配置 OpenAI 兼容端点)
362
403
  log.ts 进度日志(stderr 默认输出;--debug 输出调试明细)
363
- bsk/tools.ts browserskill 工具层(含 upload 文件上传)
364
- report.ts 报告解析与渲染
404
+ bsk/tools.ts browserskill 操作层与工具层(含 upload 文件上传、录制上报)
405
+ record.ts 录制层(把成功操作与断言记成可回放步骤)
406
+ locator.ts 语义定位符(快照解析 + 回放时按 role/name/序号重定位)
407
+ replay.ts 回放脚本(格式、读写校验 + 零模型回放引擎)
408
+ report.ts 报告解析、渲染与套件汇总(LLM 运行与回放共用)
365
409
  examples/
366
410
  smoke.md 示例套件(A1–A3)
367
411
  github-star.md GitHub Star 用例
368
412
  element-plus-upload.md 文件上传用例(点击 Click to upload 上传本地图片)
369
413
  plm-product-bom.md PLM 长流程用例(建产品→目录→物料→检出→待办同意→BOM 插入)
370
414
  tests/smoke.test.mjs 端到端验证
415
+ tests/report.test.mjs / tests/replay.test.mjs 单元测试(无浏览器/LLM 依赖)
371
416
  ```
package/dist/agent.d.ts CHANGED
@@ -1,8 +1,16 @@
1
1
  import { type TestReport, type TokenUsage } from "./report.js";
2
+ import type { ScenarioRecording } from "./replay.js";
3
+ import { type RunVarValue } from "./vars.js";
2
4
  export interface AgentOptions {
3
5
  session?: string;
4
6
  systemPrompt?: string;
5
7
  debug?: boolean;
8
+ /** 场景名(套件模式下由 `## 场景名` 提供),写进录制结果供回放脚本使用。 */
9
+ scenarioName?: string;
10
+ /** 本次运行展开 `${...}` 占位符用的取值,录制回放脚本时用于把具体值还原成占位符。 */
11
+ vars?: RunVarValue[];
12
+ /** 将要写入的回放脚本路径(仅用于在报告里标注,落盘由 CLI 负责)。 */
13
+ scriptPath?: string;
6
14
  }
7
15
  export interface AgentRunResult {
8
16
  report: TestReport;
@@ -10,6 +18,8 @@ export interface AgentRunResult {
10
18
  json: string;
11
19
  transcript: string;
12
20
  usage: TokenUsage;
21
+ /** 本次运行录制到的可回放步骤(单场景一条;套件模式逐场景一条)。 */
22
+ recordings: ScenarioRecording[];
13
23
  }
14
24
  interface Scenario {
15
25
  name: string;
package/dist/agent.js CHANGED
@@ -4,7 +4,9 @@ import { closeSession, createBskTools, ensureSession, ensureBskReady, } from "./
4
4
  import { JevClient } from "./jev.js";
5
5
  import { loadConfig } from "./config.js";
6
6
  import { debugLog, info, setDebug } from "./log.js";
7
- import { addUsage, buildReport, countAssertions, emptyUsage, formatUsage, mergeUsage, numberSteps, parseAssertions, parseProgress, } from "./report.js";
7
+ import { addUsage, buildReport, countAssertions, emptyUsage, formatUsage, numberSteps, parseAssertions, parseProgress, renderSuiteText, renderText, summarizeSuite, } from "./report.js";
8
+ import { Recorder } from "./record.js";
9
+ import { restorePlaceholders } from "./vars.js";
8
10
  const DEFAULT_SYSTEM_PROMPT = [
9
11
  "你是「页面测试 agent」。你根据用户的自然语言测试意图,驱动浏览器完成端到端测试。",
10
12
  "",
@@ -32,6 +34,11 @@ const DEFAULT_SYSTEM_PROMPT = [
32
34
  "- 只要还有未执行的步骤,就继续调用工具执行下一步,不要中途停下等待用户输入;只有全部步骤都执行(或已明确失败)后才输出进度声明并收尾。",
33
35
  "- 工具调用失败(如 click 找不到元素、超时)不等于该步骤失败:必须先重新 snapshot 定位元素后重试;同一操作连续两次失败才可判定该步骤失败。",
34
36
  "",
37
+ "下拉菜单(关键):",
38
+ "- 很多组件库(如 element-plus 的 el-dropdown)的下拉菜单是**悬停触发**的:必须先用 hover 悬停在触发按钮上、等菜单展开,再 click 菜单项。直接 click 触发按钮常常点不开菜单。",
39
+ "- 判断菜单是否已展开:snapshot 里出现了对应的菜单项(如 menuitem「上传文档」)。若 click 触发按钮后 snapshot 里没有菜单项,改为 hover 再点,不要继续在同一个位置重复 click。",
40
+ "- 页面上可能有多个同名下拉(例如页面级的「操作」与当前区域级的「操作」)。选错会展开完全不同的菜单,后续步骤连锁失败:请按当前操作的区域选择那一个,并在它展开后确认菜单项与用例要求一致。",
41
+ "",
35
42
  "表单提交失败处理(关键,不得跳过):",
36
43
  "- 点击「提交 / 确定 / 保存 / 确认」类按钮后,必须先确认动作是否真的成功:弹窗是否关闭、是否出现成功提示、列表数据是否刷新。",
37
44
  "- 若弹窗仍未关闭、仍停留在表单页,或出现「xxx 不能为空」「请输入 xxx」「请选择 xxx」「必填项」等校验提示,一律视为提交失败,此时不得跳过该步骤、不得继续下一步。",
@@ -59,8 +66,6 @@ const TRIMMED_MARK = "(较早的快照已省略";
59
66
  // 后面的步骤根本没执行。这里按 agent 自报的进度/已解析断言数补「继续执行」提示,
60
67
  // 直到跑满、确实没有进展或达到次数上限为止。
61
68
  const MAX_CONTINUATIONS = 5;
62
- /** 套件报告里每个场景最多回放多少条执行轨迹(末尾优先),避免报告过长。 */
63
- const TRACE_TAIL_LINES = 25;
64
69
  /** 构造续跑提示:只要求接着做,不重复已完成步骤,并再次强调进度声明格式。 */
65
70
  function continuePrompt(progress) {
66
71
  const tail = "不要重复已完成的步骤;每完成一步记「第 k 步完成:<结果>」,全部步骤执行完后必须单独输出一行「步骤完成:<已完成数>/<总数>」。";
@@ -153,12 +158,14 @@ export async function runAgent(input, opts = {}) {
153
158
  closeSession(holder.id);
154
159
  }
155
160
  }
156
- /** runAgent 的实际编排逻辑;session 记录到 holder 供调用方兜底清理。 */
157
- async function runAgentCore(input, opts, holder) {
161
+ /**
162
+ * 阶段一:准备运行环境。
163
+ * 完成 LLM 后端创建、bsk 就绪检查、session 创建、工具组装、Agent 实例化与事件订阅。
164
+ */
165
+ async function initializeAgent(input, opts, holder) {
158
166
  const debug = opts.debug ?? false;
159
- setDebug(debug);
160
167
  const log = debugLog;
161
- const t0 = Date.now();
168
+ const startedAt = Date.now();
162
169
  log("[runAgent] 开始,输入长度=" + input.length);
163
170
  // 由 pageqa 统一给用例的每行编号后再交给模型:模型输出的「步骤完成:k/n」
164
171
  // 就能映射回用例原文,报告可直接指出「停在哪一步、下一步该做什么」。
@@ -175,11 +182,19 @@ async function runAgentCore(input, opts, holder) {
175
182
  holder.id = session;
176
183
  log("[runAgent] bsk session=" + session);
177
184
  info(`[pageqa] bsk session=${session}`);
178
- const jevCfg = loadConfig().jev;
179
- const jevClient = new JevClient(jevCfg, debug);
185
+ const jevClient = new JevClient(loadConfig().jev, debug);
180
186
  log("[runAgent] Jev enabled=" + jevClient.enabled);
181
187
  info(`[pageqa] 语义断言(Jev)${jevClient.enabled ? "已启用" : "未启用"}`);
182
- const tools = createBskTools({ session, jevClient });
188
+ // 录制器:始终收集本次运行的操作序列,是否落盘由 CLI --emit-script 决定。
189
+ // 记录是否启用了 Jev:语义录制的断言在回放的字符串匹配下可能误报,需要标记。
190
+ const recorder = new Recorder(opts.vars ?? [], {
191
+ semantic: jevClient.enabled,
192
+ });
193
+ const tools = createBskTools({
194
+ session,
195
+ jevClient,
196
+ onExec: (event) => recorder.noteTool(event),
197
+ });
183
198
  log("[runAgent] 工具数=" +
184
199
  tools.length +
185
200
  " " +
@@ -209,8 +224,17 @@ async function runAgentCore(input, opts, holder) {
209
224
  return trimmed;
210
225
  },
211
226
  });
212
- // 工具执行进度始终打印(默认可见),让长流程每跑一步都有回显;
213
- // 避免出现「终端长时间无输出、不知道卡在哪一步」的观感。
227
+ subscribeProgress(agent, events, recorder);
228
+ return { agent, events, numbered, steps, recorder, startedAt };
229
+ }
230
+ /**
231
+ * 订阅 agent 事件,把工具调用与模型输出记入 events,并把进度回显到 stderr。
232
+ *
233
+ * 工具执行进度始终打印(默认可见),让长流程每跑一步都有回显;
234
+ * 避免出现「终端长时间无输出、不知道卡在哪一步」的观感。
235
+ */
236
+ function subscribeProgress(agent, events, recorder) {
237
+ const log = debugLog;
214
238
  let toolCount = 0;
215
239
  let toolStartedAt = 0;
216
240
  let firstTextLogged = false;
@@ -237,15 +261,24 @@ async function runAgentCore(input, opts, holder) {
237
261
  info("[pageqa] 模型已开始输出,正在推进步骤…");
238
262
  }
239
263
  events.push(e.assistantMessageEvent.delta);
264
+ // 顺带给录制器喂文本:从「第 k 步完成」自述里跟踪进度,
265
+ // 把后续工具调用映射回用例步骤号(映射不准时为 null,不影响回放)。
266
+ recorder.noteText(e.assistantMessageEvent.delta);
240
267
  }
241
268
  });
269
+ }
270
+ /**
271
+ * 阶段二:发首次用例,并在「有明确证据表明还没执行完」时续跑。
272
+ * 证据 = agent 自报进度未满,或用例中断言数还没跑够;进度无推进则提前停止。
273
+ */
274
+ async function executeWithContinuations(session, input) {
275
+ const { agent, events, numbered } = session;
276
+ const log = debugLog;
242
277
  log("[runAgent] 发送 prompt...");
243
278
  info("[pageqa] 已提交用例,等待模型与浏览器执行…");
244
279
  await agent.prompt(numbered);
245
280
  log("[runAgent] prompt 完成,等待 idle...");
246
281
  await agent.waitForIdle();
247
- // 续跑:只在「有明确证据表明还没执行完」时才追问,避免正常用例被多余打扰。
248
- // 证据 = agent 自报进度未满,或用例中断言数还没跑够。
249
282
  const expectedAssertions = countAssertions(input);
250
283
  let lastSignature = null;
251
284
  for (let round = 0; round < MAX_CONTINUATIONS; round++) {
@@ -282,7 +315,15 @@ async function runAgentCore(input, opts, holder) {
282
315
  await agent.prompt(continuePrompt(progress));
283
316
  await agent.waitForIdle();
284
317
  }
285
- log("[runAgent] idle 完成,耗时=" + (Date.now() - t0) + "ms");
318
+ log("[runAgent] idle 完成,耗时=" + (Date.now() - session.startedAt) + "ms");
319
+ }
320
+ /**
321
+ * 阶段三:根据执行轨迹整理报告。
322
+ * agent 因错误/上下文超限中断时,绝不当作「正常跑完」,而是显式追加强制失败断言。
323
+ */
324
+ function finalizeResult(session, input, opts) {
325
+ const { agent, events, startedAt } = session;
326
+ const log = debugLog;
286
327
  // 循环可能因模型报错/上下文超限而提前结束;此时绝不能当成「正常跑完」。
287
328
  const agentError = agent.state.errorMessage;
288
329
  log("[runAgent] 消息数=" +
@@ -293,6 +334,9 @@ async function runAgentCore(input, opts, holder) {
293
334
  events.push("\n[agent-error] " + agentError + "\n");
294
335
  const transcript = events.join("");
295
336
  const report = buildReport(input, transcript);
337
+ // 报告里标注回放脚本的落盘位置(真正写文件由 CLI 在运行结束后完成)
338
+ if (opts.scriptPath)
339
+ report.script = opts.scriptPath;
296
340
  if (agentError) {
297
341
  report.status = "fail";
298
342
  report.assertions.push({
@@ -307,15 +351,33 @@ async function runAgentCore(input, opts, holder) {
307
351
  report.usage = usage;
308
352
  log("[runAgent] " + formatUsage(usage));
309
353
  info(`[pageqa] 用例结束:${report.status === "pass" ? "PASS" : "FAIL"},` +
310
- `断言 ${report.assertions.length} 条,耗时 ${((Date.now() - t0) / 1000).toFixed(1)}s`);
354
+ `断言 ${report.assertions.length} 条,耗时 ${((Date.now() - startedAt) / 1000).toFixed(1)}s`);
311
355
  return {
312
356
  report,
313
357
  text: renderText(report),
314
358
  json: JSON.stringify(report, null, 2),
315
359
  transcript,
316
360
  usage,
361
+ // 录制结果与「跑得成不成功」无关:失败运行也能导出脚本(--emit-script),
362
+ // 便于排查「模型这次到底做了什么」。
363
+ recordings: [
364
+ {
365
+ name: opts.scenarioName ?? "场景 1",
366
+ // 用例原文同样按占位符形式写进脚本:这份文本会被回放报告用来指出
367
+ // 「对应用例第 k 步」,与用户的用例文件保持一致才不会看着像写死了值。
368
+ caseSteps: (report.steps ?? []).map((s) => restorePlaceholders(s, opts.vars ?? [])),
369
+ steps: session.recorder.recorded,
370
+ },
371
+ ],
317
372
  };
318
373
  }
374
+ /** runAgent 的实际编排逻辑;session 记录到 holder 供调用方兜底清理。 */
375
+ async function runAgentCore(input, opts, holder) {
376
+ setDebug(opts.debug ?? false);
377
+ const session = await initializeAgent(input, opts, holder);
378
+ await executeWithContinuations(session, input);
379
+ return finalizeResult(session, input, opts);
380
+ }
319
381
  /** 把一个脚本拆分为多个场景(按 `## ` 二级标题分隔)。无标题则整体作为一个场景。 */
320
382
  export function splitScenarios(script) {
321
383
  const lines = script.split(/\r?\n/);
@@ -357,105 +419,32 @@ export async function runSuite(script, opts = {}) {
357
419
  scenarios.map((s) => s.name).join(" / "));
358
420
  for (const [i, sc] of scenarios.entries()) {
359
421
  info(`[pageqa] ═══ 场景 ${i + 1}/${scenarios.length}:${sc.name} ═══`);
360
- const r = await runAgent(sc.body, { ...opts, systemPrompt: undefined });
422
+ const r = await runAgent(sc.body, {
423
+ ...opts,
424
+ systemPrompt: undefined,
425
+ scenarioName: sc.name,
426
+ });
361
427
  results.push(r);
362
428
  info(`[pageqa] ═══ 场景 ${i + 1}/${scenarios.length} 结束:` +
363
429
  `${r.report.status === "pass" ? "PASS" : "FAIL"} ═══`);
364
430
  }
365
- const overall = results.every((r) => r.report.status === "pass")
366
- ? "pass"
367
- : "fail";
368
- const usage = results.reduce((acc, r) => mergeUsage(acc, r.usage), emptyUsage());
369
- const summary = {
370
- status: overall,
371
- assertions: results.flatMap((r, i) => r.report.assertions.map((a) => ({
372
- ...a,
373
- expectation: "[" + (scenarios[i]?.name ?? String(i + 1)) + "] " + a.expectation,
374
- }))),
375
- summary: "共 " +
376
- results.length +
377
- " 个场景,通过 " +
378
- results.filter((r) => r.report.status === "pass").length +
379
- " 个",
380
- transcript: results
381
- .map((r, i) => "## " +
382
- (scenarios[i]?.name ?? String(i + 1)) +
383
- "\n" +
384
- r.transcript.trim())
385
- .join("\n\n"),
386
- // 逐场景明细:JSON 报告里保留 steps/trace,CI 侧可直接定位失败场景的卡点步骤。
387
- scenarios: results.map((r, i) => ({
388
- name: scenarios[i]?.name ?? String(i + 1),
389
- status: r.report.status,
390
- steps: r.report.steps ?? [],
391
- trace: r.report.trace ?? [],
392
- assertions: r.report.assertions,
393
- })),
394
- usage,
395
- };
431
+ // 汇总口径与回放模式共用同一实现(report.ts summarizeSuite),两种模式报告结构一致。
432
+ const summary = summarizeSuite(scenarios.map((sc, i) => ({
433
+ name: sc.name,
434
+ report: results[i].report,
435
+ usage: results[i].usage,
436
+ })));
437
+ if (opts.scriptPath)
438
+ summary.script = opts.scriptPath;
396
439
  return {
397
440
  report: summary,
398
441
  text: renderSuiteText(summary, results, scenarios),
399
442
  json: JSON.stringify(summary, null, 2),
400
443
  transcript: summary.transcript,
401
- usage,
444
+ usage: summary.usage ?? emptyUsage(),
445
+ recordings: results.flatMap((r) => r.recordings),
402
446
  };
403
447
  }
404
- function verdictTag(v) {
405
- return v === "pass" ? "PASS" : "FAIL";
406
- }
407
- function assertionLine(a) {
408
- const ev = a.evidence ? " (" + a.evidence + ")" : "";
409
- return " - [" + verdictTag(a.verdict) + "] " + a.expectation + ev;
410
- }
411
- function renderText(r) {
412
- const lines = [];
413
- lines.push("=== 页面测试报告 ===");
414
- lines.push("结论: " + (r.status === "pass" ? "PASS" : "FAIL"));
415
- lines.push("断言数: " + r.assertions.length);
416
- for (const a of r.assertions)
417
- lines.push(assertionLine(a));
418
- if (r.summary)
419
- lines.push("摘要: " + r.summary);
420
- lines.push("---");
421
- lines.push(r.transcript.trim());
422
- lines.push("---");
423
- lines.push(formatUsage(r.usage));
424
- return lines.join("\n");
425
- }
426
- function renderSuiteText(summary, results, scenarios) {
427
- const lines = [];
428
- lines.push("=== 页面测试套件报告 ===");
429
- lines.push("整体结论: " + (summary.status === "pass" ? "PASS" : "FAIL"));
430
- lines.push("场景数: " + results.length);
431
- results.forEach((r, i) => {
432
- lines.push("");
433
- lines.push("--- 场景 " +
434
- (i + 1) +
435
- ":" +
436
- (scenarios[i]?.name ?? "") +
437
- " [" +
438
- (r.report.status === "pass" ? "PASS" : "FAIL") +
439
- "] ---");
440
- for (const a of r.report.assertions)
441
- lines.push(assertionLine(a));
442
- if (r.report.summary)
443
- lines.push(" 摘要: " + r.report.summary);
444
- // 执行轨迹:套件模式下不再只给一个「23/42」,把工具调用与步骤自述还原出来,
445
- // 使用者才能判断「卡在用例的哪一步、该改哪一句」。
446
- const trace = r.report.trace ?? [];
447
- if (trace.length > 0) {
448
- const shown = trace.slice(-TRACE_TAIL_LINES);
449
- lines.push(` 执行轨迹(末尾 ${shown.length}/${trace.length} 条):`);
450
- for (const t of shown)
451
- lines.push(" " + t);
452
- }
453
- lines.push(" " + formatUsage(r.usage));
454
- });
455
- lines.push("");
456
- lines.push("汇总: " + summary.summary);
457
- lines.push("---");
458
- lines.push(formatUsage(summary.usage));
459
- return lines.join("\n");
460
- }
448
+ // 报告渲染(renderText / renderSuiteText)与套件汇总(summarizeSuite)在 report.ts 中实现,
449
+ // LLM 运行与零模型回放共用,保证两种模式的报告结构与汇总口径一致。
461
450
  //# sourceMappingURL=agent.js.map
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAoB,MAAM,WAAW,CAAC;AA6BlE,MAAM,qBAAqB,GAAG;IAC5B,6CAA6C;IAC7C,EAAE;IACF,OAAO;IACP,uBAAuB;IACvB,oDAAoD;IACpD,sFAAsF;IACtF,uEAAuE;IACvE,oCAAoC;IACpC,uDAAuD;IACvD,EAAE;IACF,eAAe;IACf,yCAAyC;IACzC,sDAAsD;IACtD,yCAAyC;IACzC,oEAAoE;IACpE,iDAAiD;IACjD,EAAE;IACF,iBAAiB;IACjB,qFAAqF;IACrF,mEAAmE;IACnE,+CAA+C;IAC/C,uDAAuD;IACvD,8DAA8D;IAC9D,sEAAsE;IACtE,gFAAgF;IAChF,EAAE;IACF,WAAW;IACX,kHAAkH;IAClH,iHAAiH;IACjH,gGAAgG;IAChG,EAAE;IACF,oBAAoB;IACpB,qEAAqE;IACrE,yFAAyF;IACzF,uFAAuF;IACvF,yHAAyH;IACzH,8EAA8E;IAC9E,EAAE;IACF,kBAAkB;IAClB,wDAAwD;IACxD,kFAAkF;IAClF,gDAAgD;IAChD,uCAAuC;IACvC,8DAA8D;IAC9D,EAAE;IACF,sBAAsB;CACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,qCAAqC;AACrC,4CAA4C;AAC5C,qBAAqB;AACrB,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC,0CAA0C;AAC1C,8CAA8C;AAC9C,wBAAwB;AACxB,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,0CAA0C;AAC1C,SAAS,cAAc,CACrB,QAAgD;IAEhD,MAAM,IAAI,GACR,qEAAqE,CAAC;IACxE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,WAAW;YAC1D,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,eAAe;YACvC,IAAI,CACL,CAAC;IACJ,CAAC;IACD,OAAO,CACL,oDAAoD;QACpD,YAAY;QACZ,IAAI;QACJ,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,SAAS,YAAY,CAAC,QAAwB;IAC5C,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sCAAsC;AACtC,SAAS,OAAO,CAAC,KAAa,EAAE,GAAG,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,CAAC;AAED,oBAAoB;AACpB,SAAS,aAAa,CAAC,QAAwB;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAAI,CAA2B,CAAC,OAAO,CAAC;QACrD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;QACtB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,OAA8B,EAAE,CAAC;gBAClD,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ;oBAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,uCAAuC;AACvC,SAAS,kBAAkB,CACzB,QAAwB,EACxB,UAAkB,EAClB,QAAgB;IAEhB,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAI,GAAG;YAAE,OAAO,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,CAAyC,CAAC;QACtD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,CAAC;QACvE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAI,GAAG,CAAC,OAA8C,CAAC,GAAG,CACrE,CAAC,IAAI,EAAE,EAAE;YACP,IACE,IAAI,EAAE,IAAI,KAAK,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ;gBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAChC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EACF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;oBAC5B,KAAK,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,uBAAuB;aACzE,CAAC;QACJ,CAAC,CACF,CAAC;QACF,OAAO,OAAO,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,EAAE,OAAO,EAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAa,EACb,OAAqB,EAAE;IAEvB,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,CAAC,EAAE;YAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAgBD;;;GAGG;AACH,KAAK,UAAU,eAAe,CAC5B,KAAa,EACb,IAAkB,EAClB,MAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC;IACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,4CAA4C;IAC5C,oCAAoC;IACpC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CACF,iBAAiB,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,CAC1E,CAAC;IAEF,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7C,GAAG,CAAC,6BAA6B,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,0BAA0B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACvC,MAAM,cAAc,EAAE,CAAC;IACvB,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC;IACpB,GAAG,CAAC,yBAAyB,GAAG,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IAExC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzD,GAAG,CAAC,yBAAyB,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,qBAAqB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/D,kDAAkD;IAClD,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;QAC7C,QAAQ,EAAE,SAAS,CAAC,OAAO;KAC5B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,OAAO;QACP,SAAS;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;KAC5C,CAAC,CAAC;IACH,GAAG,CACD,iBAAiB;QACf,KAAK,CAAC,MAAM;QACZ,GAAG;QACH,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;IACF,IAAI,CACF,kBAAkB,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,gBAAgB,CACxE,CAAC;IAEF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,YAAY,EAAE;YACZ,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,qBAAqB;YACxD,KAAK;YACL,KAAK;SACN;QACD,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1C,qCAAqC;QACrC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,MAAM,IAAI,kBAAkB;gBAAE,OAAO,QAAQ,CAAC;YAClD,MAAM,OAAO,GAAG,kBAAkB,CAChC,QAAQ,EACR,oBAAoB,EACpB,kBAAkB,CACnB,CAAC;YACF,GAAG,CACD,mBAAmB;gBACjB,MAAM;gBACN,MAAM;gBACN,aAAa,CAAC,OAAO,CAAC;gBACtB,SAAS;gBACT,QAAQ,CAAC,MAAM;gBACf,KAAK,CACR,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IAEH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,KAAY,EACZ,MAAgB,EAChB,QAAkB;IAElB,MAAM,GAAG,GAAG,QAAQ,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACpC,GAAG,CAAC,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrC,SAAS,IAAI,CAAC,CAAC;YACf,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAC3C,+BAA+B;YAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvE,GAAG,CACD,cAAc,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAC/D,CAAC;YACF,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CACF,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAC7D,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAChD,CAAC;QACJ,CAAC;aAAM,IACL,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAC3B,CAAC,CAAC,qBAAqB,EAAE,IAAI,KAAK,YAAY,EAC9C,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,eAAe,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC3C,+BAA+B;YAC/B,sCAAsC;YACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,wBAAwB,CACrC,OAAqB,EACrB,KAAa;IAEb,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC;IAErB,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC/B,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACvC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAE1B,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY;YAAE,MAAM;QACpC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,UAAU,GAAG,QAAQ;YACzB,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK;YAChC,CAAC,CAAC,kBAAkB,GAAG,CAAC,IAAI,MAAM,GAAG,kBAAkB,CAAC;QAC1D,IAAI,CAAC,UAAU;YAAE,MAAM;QAEvB,MAAM,SAAS,GACb,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;QACzE,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAC7C,GAAG,CAAC,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;YACnD,MAAM;QACR,CAAC;QACD,aAAa,GAAG,SAAS,CAAC;QAC1B,MAAM,IAAI,GACR,eAAe;YACf,CAAC,KAAK,GAAG,CAAC,CAAC;YACX,UAAU;YACV,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACzD,MAAM;YACN,MAAM;YACN,GAAG;YACH,kBAAkB;YAClB,KAAK,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,IAAI,CACF,sBAAsB,KAAK,GAAG,CAAC,UAAU;YACvC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG;YAC7D,MAAM,MAAM,IAAI,kBAAkB,GAAG,CACxC,CAAC;QACF,MAAM,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,wBAAwB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,OAAqB,EACrB,KAAa,EACb,IAAkB;IAElB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC;IAErB,sCAAsC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IAC5C,GAAG,CACD,iBAAiB;QACf,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;QAC3B,MAAM;QACN,CAAC,UAAU,IAAI,GAAG,CAAC,CACtB,CAAC;IACF,IAAI,UAAU;QAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9C,sCAAsC;IACtC,IAAI,IAAI,CAAC,UAAU;QAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IACrD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YACrB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC;IACL,CAAC;IACD,GAAG,CACD,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CACtE,CAAC;IAEF,+CAA+C;IAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,GAAG,CAAC,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAI,CACF,iBAAiB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG;QAC5D,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzF,CAAC;IAEF,OAAO;QACL,MAAM;QACN,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,UAAU;QACV,KAAK;QACL,6CAA6C;QAC7C,oBAAoB;QACpB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,IAAI,CAAC,YAAY,IAAI,MAAM;gBACjC,kCAAkC;gBAClC,sCAAsC;gBACtC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CACxC;gBACD,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACjC;SACF;KACF,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,KAAK,UAAU,YAAY,CACzB,KAAa,EACb,IAAkB,EAClB,MAAqB;IAErB,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YACjB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,UAAU,GAAG,IAAI,CAAC;YAClB,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,8BAA8B;IAChC,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,SAAS,CAAC,MAAM;QACrB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,OAAqB,EAAE;IAEvB,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,CACF,gBAAgB,SAAS,CAAC,MAAM,OAAO;QACrC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3C,CAAC;IACF,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,IAAI,CACF,mBAAmB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,MAAM,CAC9D,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;YAChC,GAAG,IAAI;YACP,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,EAAE,CAAC,IAAI;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CACF,mBAAmB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,MAAM;YAChD,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CACxD,CAAC;IACJ,CAAC;IACD,0DAA0D;IAC1D,MAAM,OAAO,GAAG,cAAc,CAC5B,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;QACzB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;KACxB,CAAC,CAAC,CACJ,CAAC;IACF,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IACtD,OAAO;QACL,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;QAClD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU,EAAE;QACpC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,uCAAuC"}
@@ -5,9 +5,44 @@ import { JevClient } from "../jev.js";
5
5
  * 整个进程只真正执行一次(readyPromise 缓存)。
6
6
  */
7
7
  export declare function ensureBskReady(): Promise<void>;
8
+ /**
9
+ * bsk 操作层:一次浏览器操作 = 一条 bsk 命令。
10
+ *
11
+ * `lastSnapshot()` 暴露「最近一次快照文本」:录制时用它把 `@eN` 解析成语义定位符
12
+ * (`@eN` 只在那次快照内有效,不能直接写进回放脚本)。
13
+ */
14
+ export interface BskOps {
15
+ readonly session: string;
16
+ /** 最近一次快照文本(每次 snapshot / assert_text 都会刷新)。 */
17
+ lastSnapshot(): string;
18
+ navigate(url: string): string;
19
+ snapshot(): string;
20
+ click(target: string): string;
21
+ fill(target: string, value: string): string;
22
+ upload(target: string | undefined, file: string): string;
23
+ hover(target: string): string;
24
+ scroll(target: string): string;
25
+ wait(ms: number): string;
26
+ /** 断言页面是否包含期望文本;Jev 可用时走语义判断,否则字符串包含。 */
27
+ assertText(expectation: string): Promise<string>;
28
+ }
29
+ export declare function createBskOps(session: string, jevClient?: JevClient): BskOps;
30
+ /** 工具层上报的一次执行(供录制回放脚本)。 */
31
+ export interface BskToolExec {
32
+ /** 工具名。 */
33
+ name: string;
34
+ /** 模型给出的入参。 */
35
+ params: Record<string, unknown>;
36
+ /** bsk 是否成功(失败的尝试不会被录进回放脚本)。 */
37
+ ok: boolean;
38
+ /** 本次操作**之前**页面最后一次快照文本。 */
39
+ lastSnapshot: string;
40
+ }
8
41
  export interface BskToolOptions {
9
42
  session: string;
10
43
  jevClient?: JevClient;
44
+ /** 每次工具执行后的回调(录制回放脚本用)。 */
45
+ onExec?: (event: BskToolExec) => void;
11
46
  }
12
47
  /** 构造一组浏览器操作工具,供 page-test agent 调用。 */
13
48
  export declare function createBskTools(opts: BskToolOptions): AgentTool[];