pageqa 0.4.0 → 0.5.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.
- package/README.md +67 -0
- package/dist/agent.d.ts +3 -0
- package/dist/agent.js +95 -12
- package/dist/agent.js.map +1 -1
- package/dist/bsk/tools.d.ts +9 -2
- package/dist/bsk/tools.js +42 -12
- package/dist/bsk/tools.js.map +1 -1
- package/dist/index.js +57 -12
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +19 -0
- package/dist/log.js +43 -0
- package/dist/log.js.map +1 -0
- package/dist/report.d.ts +35 -0
- package/dist/report.js +80 -4
- package/dist/report.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -163,6 +163,31 @@ pageqa --suite "打开 https://example.com 并断言标题包含 Example"
|
|
|
163
163
|
|
|
164
164
|
脚本(`.md`/`.txt`)中用 `## 场景名` 分隔多个独立测试场景,CLI 会逐个运行、分别给出结论,并汇总整体 PASS/FAIL 与总退出码(任一场景失败则整体失败)。
|
|
165
165
|
|
|
166
|
+
### 失败定位(步骤编号 + 执行轨迹)
|
|
167
|
+
|
|
168
|
+
长流程失败时,只看到「步骤完成:23/42」是没法改用例的——不知道卡在用例的哪一句。为此:
|
|
169
|
+
|
|
170
|
+
1. **步骤由 pageqa 统一编号**:用例的每个非空行(忽略 `#`/`>` 说明行)会被编号为 `### 步骤 k:<原文>` 后再交给模型。模型必须按编号执行,并输出同一套编号的「第 k 步完成:…」「步骤完成:k/n」。因此 `k` 能直接映射回用例的某一行。
|
|
171
|
+
2. **报告输出执行轨迹**:套件报告里每个场景会附上工具调用与步骤自述(末尾 25 条),失败原因与卡点一目了然。
|
|
172
|
+
3. **未跑完时直接点名下一步**:完整性校验的失败项会给出「最后进展」和「未执行到的步骤(第 k/n 步):<用例原文>」,照着它就能定位到要改的那句。
|
|
173
|
+
4. JSON 报告额外提供 `steps`(用例步骤清单)与 `trace`(执行轨迹数组)字段;套件模式还提供 `scenarios[]`(逐场景的 `name/status/steps/trace/assertions`),便于 CI 侧做失败归因。
|
|
174
|
+
|
|
175
|
+
失败时的报告片段示例:
|
|
176
|
+
|
|
177
|
+
```text
|
|
178
|
+
--- 场景 1:P1 产品 → 目录 → 物料 → … [FAIL] ---
|
|
179
|
+
- [PASS] 页面中已出现产品 `自动化测试产品202609210905` (证据:列表首行显示…)
|
|
180
|
+
- [FAIL] 全部步骤执行完成(23/36) (agent 自报的步骤完成度不足;最后进展:第 23 步完成:已点击「操作」下拉并选择「检出」;未执行到的步骤(第 24/36 步):点击页面右侧菜单栏的「待办事项」,进入「待办列表」;轨迹末尾:[tool] snapshot → [tool-ok] click → [tool-error] click)
|
|
181
|
+
- [FAIL] 用例中的断言全部执行(实际 2/6) (…;最后进展:第 23 步完成…)
|
|
182
|
+
执行轨迹(末尾 25/25 条):
|
|
183
|
+
[tool] navigate
|
|
184
|
+
第 1 步完成:已打开产品列表页
|
|
185
|
+
[tool-ok] snapshot
|
|
186
|
+
…
|
|
187
|
+
[tool-error] click
|
|
188
|
+
第 23 步完成:已点击「操作」下拉并选择「检出」
|
|
189
|
+
```
|
|
190
|
+
|
|
166
191
|
### Token 消耗
|
|
167
192
|
|
|
168
193
|
每次运行结束后,报告**末尾**会给出本次运行的 LLM token 消耗(多场景套件在每个场景与末尾合计处各输出一行):
|
|
@@ -197,6 +222,36 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
|
|
|
197
222
|
|
|
198
223
|
未识别的占位符(如 `${PATH}`)原样保留,不会被替换。完整示例:`examples/plm-product-bom.md`。
|
|
199
224
|
|
|
225
|
+
### 运行进度日志
|
|
226
|
+
|
|
227
|
+
长流程(建产品 → 建物料 → 检定 → 审批 …)单次可能跑十几分钟。为避免「终端没输出、不知道卡在哪一步」,pageqa 会把**带时间戳的进度日志实时输出到 stderr**(stdout 只保留最终报告,两者互不干扰):
|
|
228
|
+
|
|
229
|
+
```text
|
|
230
|
+
08:48:45 [pageqa] ===== 启动 =====
|
|
231
|
+
08:48:45 [pageqa] 已读取脚本文件 examples/plm-product-bom.md(892 字符)
|
|
232
|
+
08:48:45 [pageqa] 运行模式:单场景
|
|
233
|
+
08:48:45 [pageqa] 用例开始:打开 http://localhost/#/plm/product/list …(892 字符)
|
|
234
|
+
08:48:45 [pageqa] LLM 已就绪:model=hunyuan-2.0-instruct
|
|
235
|
+
08:48:45 [pageqa] 检查 bsk daemon 与浏览器连接…
|
|
236
|
+
08:48:45 [pageqa] bsk daemon 未运行,正在后台启动(首次可能需数秒)…
|
|
237
|
+
08:48:47 [pageqa] bsk daemon 已就绪(1.6s)
|
|
238
|
+
08:48:47 [pageqa] bsk 已连接浏览器 1 个
|
|
239
|
+
08:48:47 [pageqa] bsk session=abc123
|
|
240
|
+
08:48:47 [pageqa] 已提交用例,等待模型与浏览器执行…
|
|
241
|
+
08:48:48 [pageqa] 模型已开始输出,正在推进步骤…
|
|
242
|
+
08:48:49 [pageqa] ▶ #1 navigate …
|
|
243
|
+
08:48:52 [pageqa] ✓ #1 navigate 2874ms
|
|
244
|
+
08:48:52 [pageqa] ▶ #2 snapshot …
|
|
245
|
+
08:48:53 [pageqa] ✓ #2 snapshot 412ms
|
|
246
|
+
...
|
|
247
|
+
08:53:10 [pageqa] 步骤未跑完,发起第 1 次续跑(进度 12/16,断言 2/4)
|
|
248
|
+
08:55:02 [pageqa] 用例结束:PASS,断言 4 条,耗时 376.4s
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
- 覆盖的关键节点:脚本读取、LLM 就绪、bsk daemon 启动/就绪耗时、浏览器连接数、session、每一步工具调用(编号 + 名称 + 耗时 + 成败)、自动续跑、最终结论与总耗时。
|
|
252
|
+
- 加 `--debug` 可看到更细的明细:每条 `bsk` 命令原文与耗时、快照字符数、上下文裁剪、Jev 请求详情。
|
|
253
|
+
- 需要把日志与报告分开处理时:报告在 stdout(`--json` 也走 stdout),日志始终在 stderr,`pageqa --json … > report.json` 即可不受日志干扰。
|
|
254
|
+
|
|
200
255
|
### CLI 选项
|
|
201
256
|
|
|
202
257
|
| 选项 | 说明 |
|
|
@@ -206,10 +261,20 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
|
|
|
206
261
|
| `--suite` | 强制按多场景套件运行 |
|
|
207
262
|
| `--init-config` | 在用户目录创建/重置配置文件 |
|
|
208
263
|
| `--out <file>` | 将报告写入文件 |
|
|
264
|
+
| `--debug` | 显示调试日志(bsk 命令与耗时、快照体积、上下文裁剪、Jev 请求详情) |
|
|
209
265
|
| `-h, --help` | 帮助 |
|
|
210
266
|
|
|
211
267
|
退出码:`0` 全部断言通过;`1` 任一断言失败/错误/无法执行。可直接接入 CI。
|
|
212
268
|
|
|
269
|
+
### 自动关闭浏览器窗口
|
|
270
|
+
|
|
271
|
+
用例跑完后(无论 PASS、FAIL 还是中途报错),pageqa 都会执行 `bsk session stop <id>` 收尾:
|
|
272
|
+
|
|
273
|
+
- 关掉本次自动化操作所在的浏览器窗口(bsk Agent Window),并归还借用过的用户标签页;
|
|
274
|
+
- 多场景套件是逐个场景运行,因此每个场景结束后各自关闭自己的窗口,不会越跑越多;
|
|
275
|
+
- `--session <id>` 传入的 session 也会在运行结束后被关闭(下次运行会重新创建);
|
|
276
|
+
- 关闭失败只在日志里提示,不会改变测试结论。
|
|
277
|
+
|
|
213
278
|
### 文件上传
|
|
214
279
|
|
|
215
280
|
脚本里直接写「点击某个上传按钮上传本地文件 `<绝对路径>`」,agent 会调用 `upload` 工具完成(可运行 `examples/element-plus-upload.md` 体验):
|
|
@@ -294,11 +359,13 @@ src/
|
|
|
294
359
|
index.ts CLI 入口
|
|
295
360
|
agent.ts 编排器(pi-agent-core Agent + bsk 工具 + 报告)
|
|
296
361
|
llm.ts LLM 后端(pi-ai 自定义 provider -> 可配置 OpenAI 兼容端点)
|
|
362
|
+
log.ts 进度日志(stderr 默认输出;--debug 输出调试明细)
|
|
297
363
|
bsk/tools.ts browserskill 工具层(含 upload 文件上传)
|
|
298
364
|
report.ts 报告解析与渲染
|
|
299
365
|
examples/
|
|
300
366
|
smoke.md 示例套件(A1–A3)
|
|
301
367
|
github-star.md GitHub Star 用例
|
|
302
368
|
element-plus-upload.md 文件上传用例(点击 Click to upload 上传本地图片)
|
|
369
|
+
plm-product-bom.md PLM 长流程用例(建产品→目录→物料→检出→待办同意→BOM 插入)
|
|
303
370
|
tests/smoke.test.mjs 端到端验证
|
|
304
371
|
```
|
package/dist/agent.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ interface Scenario {
|
|
|
19
19
|
* 用 pi-agent-core 编排一次自然语言页面测试:注入 bsk 工具,驱动浏览器执行,整理报告。
|
|
20
20
|
* 若配置中启用了 Jev(PAGEQA_JEV_ENABLED=true 且配置了 API Key),
|
|
21
21
|
* 断言环节会使用 Jev 语义判断替代字符串包含匹配。
|
|
22
|
+
*
|
|
23
|
+
* 无论用例通过、失败还是中途抛错,结束后都会关闭本次的 bsk session,
|
|
24
|
+
* 从而关掉自动化操作的那个浏览器窗口(Agent Window)。
|
|
22
25
|
*/
|
|
23
26
|
export declare function runAgent(input: string, opts?: AgentOptions): Promise<AgentRunResult>;
|
|
24
27
|
/** 把一个脚本拆分为多个场景(按 `## ` 二级标题分隔)。无标题则整体作为一个场景。 */
|
package/dist/agent.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Agent } from "@earendil-works/pi-agent-core";
|
|
2
2
|
import { createLlmBackend } from "./llm.js";
|
|
3
|
-
import { createBskTools, ensureSession, ensureBskReady } from "./bsk/tools.js";
|
|
3
|
+
import { closeSession, createBskTools, ensureSession, ensureBskReady, } from "./bsk/tools.js";
|
|
4
4
|
import { JevClient } from "./jev.js";
|
|
5
5
|
import { loadConfig } from "./config.js";
|
|
6
|
-
import {
|
|
6
|
+
import { debugLog, info, setDebug } from "./log.js";
|
|
7
|
+
import { addUsage, buildReport, countAssertions, emptyUsage, formatUsage, mergeUsage, numberSteps, parseAssertions, parseProgress, } from "./report.js";
|
|
7
8
|
const DEFAULT_SYSTEM_PROMPT = [
|
|
8
9
|
"你是「页面测试 agent」。你根据用户的自然语言测试意图,驱动浏览器完成端到端测试。",
|
|
9
10
|
"",
|
|
@@ -23,14 +24,21 @@ const DEFAULT_SYSTEM_PROMPT = [
|
|
|
23
24
|
"5. 最后用简洁中文给出结论:每个断言「成立/不成立」,并附证据(实际看到的标题或文本片段)。",
|
|
24
25
|
"",
|
|
25
26
|
"完整性要求(长流程尤其重要):",
|
|
26
|
-
"-
|
|
27
|
-
"- 每完成一个步骤,简要记一句「第 k
|
|
27
|
+
"- 用例的每一步都已用 `### 步骤 k:<描述>` 编号(k 从 1 连续递增)。必须严格按编号顺序执行**每一个步骤**,不得跳步、不得只完成前几步就总结收尾。",
|
|
28
|
+
"- 每完成一个步骤,简要记一句「第 k 步完成:<结果>」(k 必须与用例中的步骤编号一致),再继续下一步;不要提前输出最终结论。",
|
|
28
29
|
"- 结尾必须单独输出一行进度声明,格式固定:`步骤完成:<已完成步骤数>/<总步骤数>`。",
|
|
29
30
|
" 例如共 7 个步骤且全部完成时输出 `步骤完成:7/7`;只完成 4 步则输出 `步骤完成:4/7`。",
|
|
30
31
|
"- 若某步骤确实无法完成(元素找不到、操作被拒绝等),明确说明该步骤失败及原因,然后继续或终止,但仍要如实输出进度声明。",
|
|
31
32
|
"- 只要还有未执行的步骤,就继续调用工具执行下一步,不要中途停下等待用户输入;只有全部步骤都执行(或已明确失败)后才输出进度声明并收尾。",
|
|
32
33
|
"- 工具调用失败(如 click 找不到元素、超时)不等于该步骤失败:必须先重新 snapshot 定位元素后重试;同一操作连续两次失败才可判定该步骤失败。",
|
|
33
34
|
"",
|
|
35
|
+
"表单提交失败处理(关键,不得跳过):",
|
|
36
|
+
"- 点击「提交 / 确定 / 保存 / 确认」类按钮后,必须先确认动作是否真的成功:弹窗是否关闭、是否出现成功提示、列表数据是否刷新。",
|
|
37
|
+
"- 若弹窗仍未关闭、仍停留在表单页,或出现「xxx 不能为空」「请输入 xxx」「请选择 xxx」「必填项」等校验提示,一律视为提交失败,此时不得跳过该步骤、不得继续下一步。",
|
|
38
|
+
"- 提交失败时重新 snapshot 扫描当前表单的全部必填项:优先按校验提示定位缺失字段;其次找 label 前带红色「*」或标注「必填 / required」的字段。",
|
|
39
|
+
"- 逐一补齐缺失的必填项:文本/数字输入框填入合法内容(名称类可用「自动化测试+时间戳」这类合法值;编码、排序、数量、比例类填合法数字如 1、001);下拉/单选/复选/日期/级联等非文本控件先点击展开,再点选第一个可用选项或页面默认项。",
|
|
40
|
+
"- 补齐后再次提交,重复「确认是否成功 → 扫描必填项 → 补齐 → 再提交」,最多 3 轮;仍无法提交则如实记录失败原因后继续后续步骤,不得静默跳过。",
|
|
41
|
+
"",
|
|
34
42
|
"硬性约束(违反即视为测试失败):",
|
|
35
43
|
"- 严禁在 navigate 之前调用 assert_text:页面尚未打开时断言必然不成立,且会误报通过。",
|
|
36
44
|
"- 严禁在尚未 snapshot 确认页面内容的情况下就断言;若 snapshot 返回内容为空或明显不是目标页面,应报告「不成立」并说明原因,而不是编造结论。",
|
|
@@ -51,6 +59,8 @@ const TRIMMED_MARK = "(较早的快照已省略";
|
|
|
51
59
|
// 后面的步骤根本没执行。这里按 agent 自报的进度/已解析断言数补「继续执行」提示,
|
|
52
60
|
// 直到跑满、确实没有进展或达到次数上限为止。
|
|
53
61
|
const MAX_CONTINUATIONS = 5;
|
|
62
|
+
/** 套件报告里每个场景最多回放多少条执行轨迹(末尾优先),避免报告过长。 */
|
|
63
|
+
const TRACE_TAIL_LINES = 25;
|
|
54
64
|
/** 构造续跑提示:只要求接着做,不重复已完成步骤,并再次强调进度声明格式。 */
|
|
55
65
|
function continuePrompt(progress) {
|
|
56
66
|
const tail = "不要重复已完成的步骤;每完成一步记「第 k 步完成:<结果>」,全部步骤执行完后必须单独输出一行「步骤完成:<已完成数>/<总数>」。";
|
|
@@ -74,6 +84,11 @@ function collectUsage(messages) {
|
|
|
74
84
|
}
|
|
75
85
|
return acc;
|
|
76
86
|
}
|
|
87
|
+
/** 取用例文本的单行预览,便于在日志里快速识别当前跑的是哪条用例。 */
|
|
88
|
+
function preview(input, max = 60) {
|
|
89
|
+
const oneLine = input.replace(/\s+/g, " ").trim();
|
|
90
|
+
return oneLine.length > max ? oneLine.slice(0, max) + "…" : oneLine;
|
|
91
|
+
}
|
|
77
92
|
/** 粗略估算消息文本总字符数。 */
|
|
78
93
|
function estimateChars(messages) {
|
|
79
94
|
let n = 0;
|
|
@@ -124,28 +139,52 @@ function trimOldToolResults(messages, keepRecent, maxChars) {
|
|
|
124
139
|
* 用 pi-agent-core 编排一次自然语言页面测试:注入 bsk 工具,驱动浏览器执行,整理报告。
|
|
125
140
|
* 若配置中启用了 Jev(PAGEQA_JEV_ENABLED=true 且配置了 API Key),
|
|
126
141
|
* 断言环节会使用 Jev 语义判断替代字符串包含匹配。
|
|
142
|
+
*
|
|
143
|
+
* 无论用例通过、失败还是中途抛错,结束后都会关闭本次的 bsk session,
|
|
144
|
+
* 从而关掉自动化操作的那个浏览器窗口(Agent Window)。
|
|
127
145
|
*/
|
|
128
146
|
export async function runAgent(input, opts = {}) {
|
|
147
|
+
const holder = {};
|
|
148
|
+
try {
|
|
149
|
+
return await runAgentCore(input, opts, holder);
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
if (holder.id)
|
|
153
|
+
closeSession(holder.id);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** runAgent 的实际编排逻辑;session 记录到 holder 供调用方兜底清理。 */
|
|
157
|
+
async function runAgentCore(input, opts, holder) {
|
|
129
158
|
const debug = opts.debug ?? false;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
: () => { };
|
|
159
|
+
setDebug(debug);
|
|
160
|
+
const log = debugLog;
|
|
133
161
|
const t0 = Date.now();
|
|
134
162
|
log("[runAgent] 开始,输入长度=" + input.length);
|
|
163
|
+
// 由 pageqa 统一给用例的每行编号后再交给模型:模型输出的「步骤完成:k/n」
|
|
164
|
+
// 就能映射回用例原文,报告可直接指出「停在哪一步、下一步该做什么」。
|
|
165
|
+
const { numbered, steps } = numberSteps(input);
|
|
166
|
+
info(`[pageqa] 用例开始:${preview(input)}(${input.length} 字符,${steps.length} 个步骤)`);
|
|
167
|
+
log("[runAgent] 创建 LLM 后端...");
|
|
135
168
|
const { models, model } = createLlmBackend();
|
|
136
169
|
log("[runAgent] LLM 后端已创建,model=" + model.id);
|
|
137
|
-
|
|
138
|
-
|
|
170
|
+
info(`[pageqa] LLM 已就绪:model=${model.id}`);
|
|
171
|
+
info("[pageqa] 检查 bsk daemon 与浏览器连接…");
|
|
172
|
+
await ensureBskReady();
|
|
173
|
+
info("[pageqa] 创建/复用 bsk session…");
|
|
139
174
|
const session = ensureSession(opts.session);
|
|
175
|
+
holder.id = session;
|
|
140
176
|
log("[runAgent] bsk session=" + session);
|
|
177
|
+
info(`[pageqa] bsk session=${session}`);
|
|
141
178
|
const jevCfg = loadConfig().jev;
|
|
142
179
|
const jevClient = new JevClient(jevCfg, debug);
|
|
143
180
|
log("[runAgent] Jev enabled=" + jevClient.enabled);
|
|
144
|
-
|
|
181
|
+
info(`[pageqa] 语义断言(Jev)${jevClient.enabled ? "已启用" : "未启用"}`);
|
|
182
|
+
const tools = createBskTools({ session, jevClient });
|
|
145
183
|
log("[runAgent] 工具数=" +
|
|
146
184
|
tools.length +
|
|
147
185
|
" " +
|
|
148
186
|
tools.map((t) => t.name).join(", "));
|
|
187
|
+
info(`[pageqa] 工具已就绪:${tools.length} 个;用例已编号为 ${steps.length} 个步骤(报告按此定位卡点)`);
|
|
149
188
|
const events = [];
|
|
150
189
|
const agent = new Agent({
|
|
151
190
|
initialState: {
|
|
@@ -170,23 +209,39 @@ export async function runAgent(input, opts = {}) {
|
|
|
170
209
|
return trimmed;
|
|
171
210
|
},
|
|
172
211
|
});
|
|
212
|
+
// 工具执行进度始终打印(默认可见),让长流程每跑一步都有回显;
|
|
213
|
+
// 避免出现「终端长时间无输出、不知道卡在哪一步」的观感。
|
|
214
|
+
let toolCount = 0;
|
|
215
|
+
let toolStartedAt = 0;
|
|
216
|
+
let firstTextLogged = false;
|
|
173
217
|
agent.subscribe((e) => {
|
|
174
218
|
if (e.type === "tool_execution_start") {
|
|
175
219
|
events.push("[tool] " + e.toolName);
|
|
176
220
|
log("[agent] 工具调用开始: " + e.toolName);
|
|
221
|
+
toolCount += 1;
|
|
222
|
+
toolStartedAt = Date.now();
|
|
223
|
+
info(`[pageqa] ▶ #${toolCount} ${e.toolName} …`);
|
|
177
224
|
}
|
|
178
225
|
else if (e.type === "tool_execution_end") {
|
|
179
226
|
// 工具失败必须显式记录,否则报告里看不出「某步其实报错了」
|
|
180
227
|
events.push((e.isError ? "[tool-error] " : "[tool-ok] ") + e.toolName);
|
|
181
228
|
log("[agent] 工具调用" + (e.isError ? "失败" : "完成") + ": " + e.toolName);
|
|
229
|
+
const cost = toolStartedAt ? Date.now() - toolStartedAt : 0;
|
|
230
|
+
info(`[pageqa] ${e.isError ? "✗" : "✓"} #${toolCount} ${e.toolName}` +
|
|
231
|
+
`${e.isError ? "(失败,将重试或报告)" : ""} ${cost}ms`);
|
|
182
232
|
}
|
|
183
233
|
else if (e.type === "message_update" &&
|
|
184
234
|
e.assistantMessageEvent?.type === "text_delta") {
|
|
235
|
+
if (!firstTextLogged) {
|
|
236
|
+
firstTextLogged = true;
|
|
237
|
+
info("[pageqa] 模型已开始输出,正在推进步骤…");
|
|
238
|
+
}
|
|
185
239
|
events.push(e.assistantMessageEvent.delta);
|
|
186
240
|
}
|
|
187
241
|
});
|
|
188
242
|
log("[runAgent] 发送 prompt...");
|
|
189
|
-
|
|
243
|
+
info("[pageqa] 已提交用例,等待模型与浏览器执行…");
|
|
244
|
+
await agent.prompt(numbered);
|
|
190
245
|
log("[runAgent] prompt 完成,等待 idle...");
|
|
191
246
|
await agent.waitForIdle();
|
|
192
247
|
// 续跑:只在「有明确证据表明还没执行完」时才追问,避免正常用例被多余打扰。
|
|
@@ -221,6 +276,9 @@ export async function runAgent(input, opts = {}) {
|
|
|
221
276
|
")\n";
|
|
222
277
|
events.push(note);
|
|
223
278
|
log("[runAgent] " + note.trim());
|
|
279
|
+
info(`[pageqa] 步骤未跑完,发起第 ${round + 1} 次续跑(进度 ` +
|
|
280
|
+
`${progress ? `${progress.done}/${progress.total}` : "未声明"},` +
|
|
281
|
+
`断言 ${parsed}/${expectedAssertions})`);
|
|
224
282
|
await agent.prompt(continuePrompt(progress));
|
|
225
283
|
await agent.waitForIdle();
|
|
226
284
|
}
|
|
@@ -248,6 +306,8 @@ export async function runAgent(input, opts = {}) {
|
|
|
248
306
|
const usage = collectUsage(agent.state.messages);
|
|
249
307
|
report.usage = usage;
|
|
250
308
|
log("[runAgent] " + formatUsage(usage));
|
|
309
|
+
info(`[pageqa] 用例结束:${report.status === "pass" ? "PASS" : "FAIL"},` +
|
|
310
|
+
`断言 ${report.assertions.length} 条,耗时 ${((Date.now() - t0) / 1000).toFixed(1)}s`);
|
|
251
311
|
return {
|
|
252
312
|
report,
|
|
253
313
|
text: renderText(report),
|
|
@@ -290,11 +350,17 @@ export function splitScenarios(script) {
|
|
|
290
350
|
}
|
|
291
351
|
/** 批量运行多个场景并汇总报告。任一失败则整体失败。 */
|
|
292
352
|
export async function runSuite(script, opts = {}) {
|
|
353
|
+
setDebug(opts.debug ?? false);
|
|
293
354
|
const scenarios = splitScenarios(script);
|
|
294
355
|
const results = [];
|
|
295
|
-
|
|
356
|
+
info(`[pageqa] 套件共 ${scenarios.length} 个场景:` +
|
|
357
|
+
scenarios.map((s) => s.name).join(" / "));
|
|
358
|
+
for (const [i, sc] of scenarios.entries()) {
|
|
359
|
+
info(`[pageqa] ═══ 场景 ${i + 1}/${scenarios.length}:${sc.name} ═══`);
|
|
296
360
|
const r = await runAgent(sc.body, { ...opts, systemPrompt: undefined });
|
|
297
361
|
results.push(r);
|
|
362
|
+
info(`[pageqa] ═══ 场景 ${i + 1}/${scenarios.length} 结束:` +
|
|
363
|
+
`${r.report.status === "pass" ? "PASS" : "FAIL"} ═══`);
|
|
298
364
|
}
|
|
299
365
|
const overall = results.every((r) => r.report.status === "pass")
|
|
300
366
|
? "pass"
|
|
@@ -317,6 +383,14 @@ export async function runSuite(script, opts = {}) {
|
|
|
317
383
|
"\n" +
|
|
318
384
|
r.transcript.trim())
|
|
319
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
|
+
})),
|
|
320
394
|
usage,
|
|
321
395
|
};
|
|
322
396
|
return {
|
|
@@ -367,6 +441,15 @@ function renderSuiteText(summary, results, scenarios) {
|
|
|
367
441
|
lines.push(assertionLine(a));
|
|
368
442
|
if (r.report.summary)
|
|
369
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
|
+
}
|
|
370
453
|
lines.push(" " + formatUsage(r.usage));
|
|
371
454
|
});
|
|
372
455
|
lines.push("");
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,aAAa,GAGd,MAAM,aAAa,CAAC;AAqBrB,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,+DAA+D;IAC/D,kDAAkD;IAClD,+CAA+C;IAC/C,uDAAuD;IACvD,8DAA8D;IAC9D,sEAAsE;IACtE,gFAAgF;IAChF,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,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;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAa,EACb,OAAqB,EAAE;IAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK;QACf,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC;QAC5D,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;IAEb,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7C,GAAG,CAAC,6BAA6B,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAE9C,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACvC,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,GAAG,CAAC,yBAAyB,GAAG,OAAO,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,GAAG,CAAC,yBAAyB,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,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;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,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;QACvC,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;QACJ,CAAC;aAAM,IACL,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAC3B,CAAC,CAAC,qBAAqB,EAAE,IAAI,KAAK,YAAY,EAC9C,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC/B,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACvC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAE1B,uCAAuC;IACvC,iCAAiC;IACjC,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,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,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzD,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,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;IAExC,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;KACN,CAAC;AACJ,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,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;QAC9D,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC;IACX,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACjF,MAAM,OAAO,GAAe;QAC1B,MAAM,EAAE,OAAO;QACf,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,GAAG,CAAC;YACJ,WAAW,EACT,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW;SACrE,CAAC,CAAC,CACJ;QACD,OAAO,EACL,IAAI;YACJ,OAAO,CAAC,MAAM;YACd,UAAU;YACV,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;YACxD,IAAI;QACN,UAAU,EAAE,OAAO;aAChB,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,KAAK;YACL,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI;YACJ,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CACtB;aACA,IAAI,CAAC,MAAM,CAAC;QACf,KAAK;KACN,CAAC;IACF,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;KACN,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,CAAkB;IACpC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,CAItB;IACC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,CAAa;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,OAAO;QAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CACtB,OAAmB,EACnB,OAAyB,EACzB,SAA2C;IAE3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,SAAS;YACP,CAAC,CAAC,GAAG,CAAC,CAAC;YACP,GAAG;YACH,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC1B,IAAI;YACJ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9C,OAAO,CACV,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/bsk/tools.d.ts
CHANGED
|
@@ -4,13 +4,20 @@ import { JevClient } from "../jev.js";
|
|
|
4
4
|
* 自动确保 bsk 就绪:启动 daemon(若未运行)+ 校验浏览器连接(若未连则报错)。
|
|
5
5
|
* 整个进程只真正执行一次(readyPromise 缓存)。
|
|
6
6
|
*/
|
|
7
|
-
export declare function ensureBskReady(
|
|
7
|
+
export declare function ensureBskReady(): Promise<void>;
|
|
8
8
|
export interface BskToolOptions {
|
|
9
9
|
session: string;
|
|
10
10
|
jevClient?: JevClient;
|
|
11
|
-
debug?: boolean;
|
|
12
11
|
}
|
|
13
12
|
/** 构造一组浏览器操作工具,供 page-test agent 调用。 */
|
|
14
13
|
export declare function createBskTools(opts: BskToolOptions): AgentTool[];
|
|
15
14
|
/** 创建一个 bsk session;若已提供且仍在活跃列表中则复用,否则新建。 */
|
|
16
15
|
export declare function ensureSession(existing?: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* 关闭本次运行用过的 bsk session:bsk 会随之销毁该 session 的 Agent Window,
|
|
18
|
+
* 即自动化操作的那个浏览器窗口,并归还借用过的用户标签页。
|
|
19
|
+
*
|
|
20
|
+
* 用例跑完(无论通过还是失败)都应调用,避免留下越来越多个浏览器窗口。
|
|
21
|
+
* 清理失败只提示、不抛出:它不应该改变测试结论,也不该掩盖真正的失败原因。
|
|
22
|
+
*/
|
|
23
|
+
export declare function closeSession(session: string): void;
|
package/dist/bsk/tools.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execFileSync, spawn } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
|
+
import { debugLog, info, timer } from "../log.js";
|
|
3
4
|
/**
|
|
4
5
|
* browserskill(`bsk`)工具层:把 bsk CLI 命令包装成 pi-agent-core 的 AgentTool。
|
|
5
6
|
*
|
|
@@ -8,14 +9,21 @@ import { existsSync } from "node:fs";
|
|
|
8
9
|
*/
|
|
9
10
|
const BSK_TIMEOUT_MS = 60_000;
|
|
10
11
|
function bsk(args) {
|
|
12
|
+
// 调试模式打印每条 bsk 命令,便于定位「卡在哪条命令」;
|
|
13
|
+
// execFileSync 是阻塞的,所以命令执行期间不会再有其它的日志。
|
|
14
|
+
const done = timer();
|
|
15
|
+
debugLog("[bsk] $ bsk " + args.join(" "));
|
|
11
16
|
try {
|
|
12
|
-
|
|
17
|
+
const out = execFileSync("bsk", args, {
|
|
13
18
|
encoding: "utf-8",
|
|
14
19
|
timeout: BSK_TIMEOUT_MS,
|
|
15
20
|
windowsHide: true,
|
|
16
21
|
}).toString();
|
|
22
|
+
debugLog(`[bsk] $ bsk ${args[0] ?? ""} 完成(${done()}ms)`);
|
|
23
|
+
return out;
|
|
17
24
|
}
|
|
18
25
|
catch (err) {
|
|
26
|
+
debugLog(`[bsk] $ bsk ${args[0] ?? ""} 失败(${done()}ms)`);
|
|
19
27
|
const e = err;
|
|
20
28
|
if (e.code === "ENOENT") {
|
|
21
29
|
throw new Error("未找到 bsk 命令:请先安装 browserskill 并确认 bsk 在 PATH 中");
|
|
@@ -51,6 +59,8 @@ function connectedBrowserCount() {
|
|
|
51
59
|
/** 后台启动 bsk daemon(bsk daemon start 是前台阻塞的,必须 detached 启动后轮询等待就绪)。 */
|
|
52
60
|
function startDaemon() {
|
|
53
61
|
return new Promise((resolve, reject) => {
|
|
62
|
+
const started = Date.now();
|
|
63
|
+
info("[pageqa] bsk daemon 未运行,正在后台启动(首次可能需数秒)…");
|
|
54
64
|
const child = spawn("bsk", ["daemon", "start"], {
|
|
55
65
|
detached: true,
|
|
56
66
|
stdio: "ignore",
|
|
@@ -68,6 +78,7 @@ function startDaemon() {
|
|
|
68
78
|
// 子进程状态读取失败,继续轮询
|
|
69
79
|
}
|
|
70
80
|
if (bskStatusJson() !== null) {
|
|
81
|
+
info(`[pageqa] bsk daemon 已就绪(${((Date.now() - started) / 1000).toFixed(1)}s)`);
|
|
71
82
|
resolve();
|
|
72
83
|
return;
|
|
73
84
|
}
|
|
@@ -75,6 +86,7 @@ function startDaemon() {
|
|
|
75
86
|
reject(new Error("bsk daemon 启动超时(30s),请检查 bsk 安装或手动运行 `bsk daemon start`"));
|
|
76
87
|
return;
|
|
77
88
|
}
|
|
89
|
+
debugLog(`[bsk] 等待 daemon 就绪… ${((Date.now() - started) / 1000).toFixed(1)}s`);
|
|
78
90
|
setTimeout(poll, 500);
|
|
79
91
|
};
|
|
80
92
|
setTimeout(poll, 500);
|
|
@@ -85,27 +97,23 @@ let readyPromise = null;
|
|
|
85
97
|
* 自动确保 bsk 就绪:启动 daemon(若未运行)+ 校验浏览器连接(若未连则报错)。
|
|
86
98
|
* 整个进程只真正执行一次(readyPromise 缓存)。
|
|
87
99
|
*/
|
|
88
|
-
export function ensureBskReady(
|
|
100
|
+
export function ensureBskReady() {
|
|
89
101
|
if (readyPromise)
|
|
90
102
|
return readyPromise;
|
|
91
|
-
const log = debug
|
|
92
|
-
? (m) => process.stderr.write("[bsk] " + m + "\n")
|
|
93
|
-
: () => { };
|
|
94
103
|
readyPromise = (async () => {
|
|
104
|
+
debugLog("[bsk] 查询 daemon 状态…");
|
|
95
105
|
if (bskStatusJson() === null) {
|
|
96
|
-
log("daemon 未运行,尝试启动...");
|
|
97
106
|
await startDaemon();
|
|
98
|
-
log("daemon 已启动");
|
|
99
107
|
}
|
|
100
108
|
else {
|
|
101
|
-
|
|
109
|
+
debugLog("[bsk] daemon 已在运行,跳过启动");
|
|
102
110
|
}
|
|
103
111
|
const n = connectedBrowserCount();
|
|
104
112
|
if (n === 0) {
|
|
105
113
|
throw new Error("bsk 未连接任何浏览器:pageqa 无法自动连接物理浏览器。\n" +
|
|
106
114
|
"请在浏览器中安装 bsk 扩展并完成连接(或运行 `bsk session start` 按其提示连接),再重试。");
|
|
107
115
|
}
|
|
108
|
-
|
|
116
|
+
info(`[pageqa] bsk 已连接浏览器 ${n} 个`);
|
|
109
117
|
})();
|
|
110
118
|
return readyPromise;
|
|
111
119
|
}
|
|
@@ -152,8 +160,7 @@ export function createBskTools(opts) {
|
|
|
152
160
|
execute: async () => {
|
|
153
161
|
const out = bsk(["snapshot", ...quiet]);
|
|
154
162
|
// 快照体积直接决定上下文压力(长流程易因上下文超限被中断)
|
|
155
|
-
|
|
156
|
-
process.stderr.write("[bsk] snapshot 字符数=" + out.length + "\n");
|
|
163
|
+
debugLog("[bsk] snapshot 字符数=" + out.length);
|
|
157
164
|
return ok(out);
|
|
158
165
|
},
|
|
159
166
|
};
|
|
@@ -349,8 +356,11 @@ export function createBskTools(opts) {
|
|
|
349
356
|
}
|
|
350
357
|
/** 创建一个 bsk session;若已提供且仍在活跃列表中则复用,否则新建。 */
|
|
351
358
|
export function ensureSession(existing) {
|
|
352
|
-
if (existing && isActiveSession(existing))
|
|
359
|
+
if (existing && isActiveSession(existing)) {
|
|
360
|
+
debugLog(`[bsk] 复用已存在的 session ${existing}`);
|
|
353
361
|
return existing;
|
|
362
|
+
}
|
|
363
|
+
debugLog("[bsk] 创建新的 session…");
|
|
354
364
|
const out = bsk(["session", "start", "--json"]);
|
|
355
365
|
try {
|
|
356
366
|
const json = JSON.parse(out);
|
|
@@ -364,6 +374,26 @@ export function ensureSession(existing) {
|
|
|
364
374
|
}
|
|
365
375
|
throw new Error("无法创建 bsk session,请确认 bsk daemon 已连接浏览器。");
|
|
366
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* 关闭本次运行用过的 bsk session:bsk 会随之销毁该 session 的 Agent Window,
|
|
379
|
+
* 即自动化操作的那个浏览器窗口,并归还借用过的用户标签页。
|
|
380
|
+
*
|
|
381
|
+
* 用例跑完(无论通过还是失败)都应调用,避免留下越来越多个浏览器窗口。
|
|
382
|
+
* 清理失败只提示、不抛出:它不应该改变测试结论,也不该掩盖真正的失败原因。
|
|
383
|
+
*/
|
|
384
|
+
export function closeSession(session) {
|
|
385
|
+
const done = timer();
|
|
386
|
+
try {
|
|
387
|
+
debugLog(`[bsk] 关闭 session ${session}(同时关闭 Agent Window)…`);
|
|
388
|
+
bsk(["session", "stop", session, "--quiet"]);
|
|
389
|
+
debugLog(`[bsk] session ${session} 已关闭(${done()}ms)`);
|
|
390
|
+
info(`[pageqa] 已关闭 bsk session=${session}(浏览器窗口已关闭)`);
|
|
391
|
+
}
|
|
392
|
+
catch (err) {
|
|
393
|
+
info(`[pageqa] 关闭 bsk session=${session} 失败(不影响测试结论):` +
|
|
394
|
+
(err instanceof Error ? err.message : String(err)));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
367
397
|
/** 检查给定 session 是否在 bsk 活跃列表里。 */
|
|
368
398
|
function isActiveSession(id) {
|
|
369
399
|
try {
|
package/dist/bsk/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/bsk/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/bsk/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
3
4
|
import { runAgent, runSuite } from "./agent.js";
|
|
4
5
|
import { ensureConfigDir, CONFIG_PATH, loadConfig } from "./config.js";
|
|
5
6
|
import { expandVars, VAR_HELP } from "./vars.js";
|
|
7
|
+
import { info, setDebug } from "./log.js";
|
|
6
8
|
function parseArgs(argv) {
|
|
7
9
|
const args = {
|
|
8
10
|
json: false,
|
|
@@ -48,18 +50,28 @@ const HELP = `pageqa - 自然语言驱动的页面测试工具(pi-agent-core +
|
|
|
48
50
|
用法:
|
|
49
51
|
pageqa [options] <input>
|
|
50
52
|
|
|
51
|
-
<input> 自然语言脚本文件(.md/.txt)
|
|
53
|
+
<input> 自然语言脚本文件(.md/.txt,路径含空格请用引号包裹),
|
|
54
|
+
或用引号包裹的内联文本
|
|
52
55
|
脚本中可用『## 场景名』分隔多个测试场景,自动批量运行
|
|
56
|
+
路径中粘贴带来的不可见字符(Bidi/零宽)会被自动清理;
|
|
57
|
+
若路径以 .md/.txt 结尾但文件不存在,会直接报错而非当作内联文本
|
|
53
58
|
|
|
54
59
|
选项:
|
|
55
60
|
--session <id> 指定已存在的 bsk session(默认自动创建)
|
|
61
|
+
无论新建还是复用,用例跑完后都会自动关闭该 session
|
|
62
|
+
并关掉它对应的浏览器窗口(Agent Window)
|
|
56
63
|
--json 输出 JSON 报告
|
|
57
64
|
--suite 强制按多场景套件运行(即使只有一个场景)
|
|
58
65
|
--init-config 在用户目录创建/重置配置文件
|
|
59
66
|
--out <file> 将报告写入文件
|
|
60
|
-
--debug 显示调试日志(
|
|
67
|
+
--debug 显示调试日志(bsk 命令、快照体积、上下文裁剪、Jev 请求详情)
|
|
61
68
|
-h, --help 显示帮助
|
|
62
69
|
|
|
70
|
+
进度日志:
|
|
71
|
+
- 运行进度会带时间戳实时输出到 stderr(bsk daemon 启动、session、每一步工具调用、
|
|
72
|
+
续跑与最终结论等),stdout 只输出最终报告,两者互不干扰;长流程可据此判断进行到哪一步。
|
|
73
|
+
- 加 --debug 可看到更细的 bsk 命令与耗时明细。
|
|
74
|
+
|
|
63
75
|
脚本占位符:
|
|
64
76
|
${VAR_HELP}
|
|
65
77
|
|
|
@@ -86,17 +98,31 @@ ${VAR_HELP}
|
|
|
86
98
|
pageqa examples/smoke.md --json
|
|
87
99
|
pageqa examples/smoke.md --debug
|
|
88
100
|
`;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
101
|
+
/**
|
|
102
|
+
* 从资源管理器「复制文件路径」或聊天工具粘贴路径时,常会夹带不可见的
|
|
103
|
+
* Bidi 控制符 / 零宽字符(如 U+202A LEFT-TO-RIGHT EMBEDDING、U+200B、U+FEFF)。
|
|
104
|
+
* 它们肉眼不可见,却会让 readFileSync 找不到文件,进而把路径误判成内联文本。
|
|
105
|
+
*/
|
|
106
|
+
const INVISIBLE_CHARS = /[\u200B-\u200F\u202A-\u202E\u2066-\u2069\uFEFF]/g;
|
|
107
|
+
/** 清洗命令行传入的 <input>:去不可见字符、去首尾空白、去成对引号、去 file:// 前缀。 */
|
|
108
|
+
function cleanInput(raw) {
|
|
109
|
+
let s = raw.replace(INVISIBLE_CHARS, "").trim();
|
|
110
|
+
const quoted = s.match(/^(["'])([\s\S]*)\1$/);
|
|
111
|
+
if (quoted)
|
|
112
|
+
s = quoted[2].replace(INVISIBLE_CHARS, "").trim();
|
|
113
|
+
if (/^file:\/\//i.test(s)) {
|
|
92
114
|
try {
|
|
93
|
-
|
|
115
|
+
s = fileURLToPath(s);
|
|
94
116
|
}
|
|
95
117
|
catch {
|
|
96
|
-
//
|
|
118
|
+
// 非法 file URL:保持原样,后续按不存在处理
|
|
97
119
|
}
|
|
98
120
|
}
|
|
99
|
-
return
|
|
121
|
+
return s;
|
|
122
|
+
}
|
|
123
|
+
/** 是否"看起来"是一个脚本文件路径:单行且以 .md/.txt 结尾(大小写不敏感)。 */
|
|
124
|
+
function looksLikeScriptFile(input) {
|
|
125
|
+
return !/[\r\n]/.test(input) && /\.(md|txt)$/i.test(input);
|
|
100
126
|
}
|
|
101
127
|
async function main() {
|
|
102
128
|
const args = parseArgs(process.argv.slice(2));
|
|
@@ -115,10 +141,29 @@ async function main() {
|
|
|
115
141
|
process.stdout.write(HELP + "\n");
|
|
116
142
|
return 1;
|
|
117
143
|
}
|
|
118
|
-
|
|
144
|
+
setDebug(args.debug);
|
|
145
|
+
const rawInput = cleanInput(args.input);
|
|
146
|
+
const isFile = looksLikeScriptFile(rawInput) && existsSync(rawInput);
|
|
147
|
+
if (!isFile && looksLikeScriptFile(rawInput)) {
|
|
148
|
+
// 看起来是脚本文件路径但打不开:明确报错,避免把路径本身当成用例去"测试"
|
|
149
|
+
process.stderr.write(`找不到脚本文件:${rawInput}\n` +
|
|
150
|
+
` - 请确认路径存在且拼写正确\n` +
|
|
151
|
+
` - 若路径含空格,请用引号包裹(如 "C:\\dir\\my case.md")\n` +
|
|
152
|
+
` - 若只想跑内联文本,请不要让文本以 .md/.txt 结尾\n`);
|
|
153
|
+
return 1;
|
|
154
|
+
}
|
|
155
|
+
const input = isFile
|
|
156
|
+
? expandVars(readFileSync(rawInput, "utf8"))
|
|
157
|
+
: expandVars(rawInput);
|
|
158
|
+
const hasScenarios = /^##\s+/m.test(input);
|
|
159
|
+
const suiteMode = hasScenarios || args.suite;
|
|
160
|
+
info("[pageqa] ===== 启动 =====");
|
|
161
|
+
info(`[pageqa] 已读取${isFile ? `脚本文件 ${rawInput}` : "内联用例"}(${input.length} 字符)`);
|
|
162
|
+
info(`[pageqa] 运行模式:${suiteMode ? "多场景套件" : "单场景"}` +
|
|
163
|
+
`${args.session ? `,session=${args.session}` : ""}` +
|
|
164
|
+
`${args.debug ? ",debug=on(stderr 含调试明细)" : ""}`);
|
|
119
165
|
try {
|
|
120
|
-
const
|
|
121
|
-
const result = hasScenarios || args.suite
|
|
166
|
+
const result = suiteMode
|
|
122
167
|
? await runSuite(input, { session: args.session, debug: args.debug })
|
|
123
168
|
: await runAgent(input, { session: args.session, debug: args.debug });
|
|
124
169
|
const out = args.json ? result.json : result.text;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进度日志:统一输出到 **stderr**(stdout 保留给测试报告本身)。
|
|
3
|
+
*
|
|
4
|
+
* - `info()`:常规进度,**默认始终输出**,让长时间运行的用例在终端能看到「进行到哪一步」,
|
|
5
|
+
* 避免看起来像卡死(尤其是 bsk daemon 启动、创建 session、等待模型输出这些静默阶段)。
|
|
6
|
+
* - `debugLog()`:`--debug` 时额外输出的细节(bsk 命令、快照体积、上下文裁剪、Jev 请求等)。
|
|
7
|
+
*
|
|
8
|
+
* 每行带本地时间戳 `HH:mm:ss`,便于从时间间隔判断是「在跑」还是「卡住了」。
|
|
9
|
+
*/
|
|
10
|
+
/** 设置是否输出调试日志(由 CLI 的 `--debug` 决定)。 */
|
|
11
|
+
export declare function setDebug(enabled: boolean): void;
|
|
12
|
+
/** 当前是否处于调试模式。 */
|
|
13
|
+
export declare function isDebug(): boolean;
|
|
14
|
+
/** 常规进度日志(始终输出到 stderr)。 */
|
|
15
|
+
export declare function info(msg: string): void;
|
|
16
|
+
/** 调试日志(仅 `--debug` 时输出到 stderr)。 */
|
|
17
|
+
export declare function debugLog(msg: string): void;
|
|
18
|
+
/** 简单计时器:`const done = timer(); … done()` 返回自创建以来的毫秒数。 */
|
|
19
|
+
export declare function timer(): () => number;
|
package/dist/log.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进度日志:统一输出到 **stderr**(stdout 保留给测试报告本身)。
|
|
3
|
+
*
|
|
4
|
+
* - `info()`:常规进度,**默认始终输出**,让长时间运行的用例在终端能看到「进行到哪一步」,
|
|
5
|
+
* 避免看起来像卡死(尤其是 bsk daemon 启动、创建 session、等待模型输出这些静默阶段)。
|
|
6
|
+
* - `debugLog()`:`--debug` 时额外输出的细节(bsk 命令、快照体积、上下文裁剪、Jev 请求等)。
|
|
7
|
+
*
|
|
8
|
+
* 每行带本地时间戳 `HH:mm:ss`,便于从时间间隔判断是「在跑」还是「卡住了」。
|
|
9
|
+
*/
|
|
10
|
+
let debugEnabled = false;
|
|
11
|
+
/** 设置是否输出调试日志(由 CLI 的 `--debug` 决定)。 */
|
|
12
|
+
export function setDebug(enabled) {
|
|
13
|
+
debugEnabled = enabled;
|
|
14
|
+
}
|
|
15
|
+
/** 当前是否处于调试模式。 */
|
|
16
|
+
export function isDebug() {
|
|
17
|
+
return debugEnabled;
|
|
18
|
+
}
|
|
19
|
+
function pad2(n) {
|
|
20
|
+
return String(n).padStart(2, "0");
|
|
21
|
+
}
|
|
22
|
+
function stamp() {
|
|
23
|
+
const d = new Date();
|
|
24
|
+
return `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;
|
|
25
|
+
}
|
|
26
|
+
function write(line) {
|
|
27
|
+
process.stderr.write(`${stamp()} ${line}\n`);
|
|
28
|
+
}
|
|
29
|
+
/** 常规进度日志(始终输出到 stderr)。 */
|
|
30
|
+
export function info(msg) {
|
|
31
|
+
write(msg);
|
|
32
|
+
}
|
|
33
|
+
/** 调试日志(仅 `--debug` 时输出到 stderr)。 */
|
|
34
|
+
export function debugLog(msg) {
|
|
35
|
+
if (debugEnabled)
|
|
36
|
+
write("[debug] " + msg);
|
|
37
|
+
}
|
|
38
|
+
/** 简单计时器:`const done = timer(); … done()` 返回自创建以来的毫秒数。 */
|
|
39
|
+
export function timer() {
|
|
40
|
+
const t0 = Date.now();
|
|
41
|
+
return () => Date.now() - t0;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=log.js.map
|
package/dist/log.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,wCAAwC;AACxC,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,OAAO;IACrB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,IAAI,CAAC,CAAS;IACrB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,KAAK;IACZ,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,KAAK,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,YAAY;QAAE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,KAAK;IACnB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC/B,CAAC"}
|
package/dist/report.d.ts
CHANGED
|
@@ -22,6 +22,20 @@ export interface TestReport {
|
|
|
22
22
|
transcript: string;
|
|
23
23
|
/** token 消耗,渲染在报告末尾;旧结构仍可用(可选字段)。 */
|
|
24
24
|
usage?: TokenUsage;
|
|
25
|
+
/** 执行轨迹(工具调用 + agent 的步骤自述),用于在报告里定位卡在哪一步。 */
|
|
26
|
+
trace?: string[];
|
|
27
|
+
/** 用例的步骤清单(按行编号),用于把「第 k 步」映射回用例原文。 */
|
|
28
|
+
steps?: string[];
|
|
29
|
+
/** 套件模式下的逐场景明细(含各自的 steps/trace),便于 CI 侧做失败归因。 */
|
|
30
|
+
scenarios?: ScenarioDetail[];
|
|
31
|
+
}
|
|
32
|
+
/** 套件模式下的单个场景明细(写进 JSON 报告,供机器消费)。 */
|
|
33
|
+
export interface ScenarioDetail {
|
|
34
|
+
name: string;
|
|
35
|
+
status: "pass" | "fail";
|
|
36
|
+
steps: string[];
|
|
37
|
+
trace: string[];
|
|
38
|
+
assertions: AssertionResult[];
|
|
25
39
|
}
|
|
26
40
|
/** 单次 LLM 调用的原始用量(pi-ai 的 `Usage`,字段允许缺失)。 */
|
|
27
41
|
export interface RawUsage {
|
|
@@ -50,6 +64,27 @@ export declare function formatUsage(usage?: TokenUsage): string;
|
|
|
50
64
|
export declare function buildReport(input: string, transcript: string): TestReport;
|
|
51
65
|
/** 统计用例(自然语言测试步骤)中的断言数量,用于校验执行完整性。 */
|
|
52
66
|
export declare function countAssertions(script: string): number;
|
|
67
|
+
/**
|
|
68
|
+
* 把用例按非空行编号,得到确定性的步骤序列(`### 步骤 k:<原文>`)。
|
|
69
|
+
*
|
|
70
|
+
* 以往步骤号由模型自己数,报告里只有「23/42」这样的数字,无法对应到用例的哪一行,
|
|
71
|
+
* 出了错也不知道该改哪一句。改由 pageqa 统一编号后再交给 agent 后,模型输出的
|
|
72
|
+
* 「步骤完成:k/n」即可直接映射回用例原文,报告就能指出「停在哪一步、下一步是什么」。
|
|
73
|
+
*
|
|
74
|
+
* 标题(`#`)与引用说明(`>`)行会被忽略,避免把文档性文字当成步骤。
|
|
75
|
+
*/
|
|
76
|
+
export declare function numberSteps(script: string): {
|
|
77
|
+
numbered: string;
|
|
78
|
+
steps: string[];
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* 抽取执行轨迹:工具调用(`[tool]` / `[tool-ok]` / `[tool-error]`)、续跑与 agent 错误标记,
|
|
82
|
+
* 以及 agent 的步骤自述(「第 k 步…」「步骤完成:k/n」)。
|
|
83
|
+
* 用于在报告里还原「跑到哪一步、卡在哪一步」,而不是只给一个失败结论。
|
|
84
|
+
*/
|
|
85
|
+
export declare function extractTrace(transcript: string): string[];
|
|
86
|
+
/** 最后一条 agent 的步骤自述(「第 k 步…」),用于说明卡点位置。 */
|
|
87
|
+
export declare function lastStepNote(trace: string[]): string | null;
|
|
53
88
|
/**
|
|
54
89
|
* 解析 agent 的进度声明「步骤完成:M/N」。
|
|
55
90
|
* 取最后一次声明:续跑时 agent 会输出多条进度,只有最后一条代表当前状态。
|
package/dist/report.js
CHANGED
|
@@ -68,6 +68,9 @@ export function formatUsage(usage) {
|
|
|
68
68
|
*/
|
|
69
69
|
export function buildReport(input, transcript) {
|
|
70
70
|
const assertions = parseAssertions(transcript);
|
|
71
|
+
const { steps } = numberSteps(input);
|
|
72
|
+
const trace = extractTrace(transcript);
|
|
73
|
+
const lastNote = lastStepNote(trace);
|
|
71
74
|
let status;
|
|
72
75
|
if (assertions.length > 0) {
|
|
73
76
|
status = assertions.every((a) => a.verdict === "pass") ? "pass" : "fail";
|
|
@@ -85,26 +88,99 @@ export function buildReport(input, transcript) {
|
|
|
85
88
|
assertions.push({
|
|
86
89
|
expectation: `用例中的断言全部执行(实际 ${assertions.length}/${expected})`,
|
|
87
90
|
verdict: "fail",
|
|
88
|
-
evidence:
|
|
91
|
+
evidence: [
|
|
92
|
+
"解析到的断言少于用例中的断言数量,疑似步骤未执行完就结束",
|
|
93
|
+
lastNote ? `最后进展:${lastNote}` : null,
|
|
94
|
+
tailTextOf(trace, 3),
|
|
95
|
+
]
|
|
96
|
+
.filter(Boolean)
|
|
97
|
+
.join(";"),
|
|
89
98
|
});
|
|
90
99
|
}
|
|
91
|
-
// agent
|
|
100
|
+
// agent 自报的步骤进度未跑满,同样判失败;并指出「下一步该做哪一步」,便于据此改用例。
|
|
92
101
|
const progress = parseProgress(transcript);
|
|
93
102
|
if (progress && progress.done < progress.total) {
|
|
94
103
|
status = "fail";
|
|
104
|
+
const nextStep = steps.length === progress.total ? steps[progress.done] : undefined;
|
|
95
105
|
assertions.push({
|
|
96
106
|
expectation: `全部步骤执行完成(${progress.done}/${progress.total})`,
|
|
97
107
|
verdict: "fail",
|
|
98
|
-
evidence:
|
|
108
|
+
evidence: [
|
|
109
|
+
"agent 自报的步骤完成度不足",
|
|
110
|
+
lastNote ? `最后进展:${lastNote}` : null,
|
|
111
|
+
nextStep
|
|
112
|
+
? `未执行到的步骤(第 ${progress.done + 1}/${progress.total} 步):${nextStep}`
|
|
113
|
+
: null,
|
|
114
|
+
tailTextOf(trace, 3),
|
|
115
|
+
]
|
|
116
|
+
.filter(Boolean)
|
|
117
|
+
.join(";"),
|
|
99
118
|
});
|
|
100
119
|
}
|
|
101
120
|
const summary = extractSummary(transcript);
|
|
102
|
-
return { status, assertions, summary, transcript };
|
|
121
|
+
return { status, assertions, summary, transcript, trace, steps };
|
|
103
122
|
}
|
|
104
123
|
/** 统计用例(自然语言测试步骤)中的断言数量,用于校验执行完整性。 */
|
|
105
124
|
export function countAssertions(script) {
|
|
106
125
|
return (script.match(/断言/g) ?? []).length;
|
|
107
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* 把用例按非空行编号,得到确定性的步骤序列(`### 步骤 k:<原文>`)。
|
|
129
|
+
*
|
|
130
|
+
* 以往步骤号由模型自己数,报告里只有「23/42」这样的数字,无法对应到用例的哪一行,
|
|
131
|
+
* 出了错也不知道该改哪一句。改由 pageqa 统一编号后再交给 agent 后,模型输出的
|
|
132
|
+
* 「步骤完成:k/n」即可直接映射回用例原文,报告就能指出「停在哪一步、下一步是什么」。
|
|
133
|
+
*
|
|
134
|
+
* 标题(`#`)与引用说明(`>`)行会被忽略,避免把文档性文字当成步骤。
|
|
135
|
+
*/
|
|
136
|
+
export function numberSteps(script) {
|
|
137
|
+
const steps = script
|
|
138
|
+
.split(/\r?\n/)
|
|
139
|
+
.map((l) => l.trim())
|
|
140
|
+
.filter((l) => l.length > 0 && !l.startsWith("#") && !l.startsWith(">"));
|
|
141
|
+
const numbered = steps.map((s, i) => `### 步骤 ${i + 1}:${s}`).join("\n");
|
|
142
|
+
return { numbered, steps };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 抽取执行轨迹:工具调用(`[tool]` / `[tool-ok]` / `[tool-error]`)、续跑与 agent 错误标记,
|
|
146
|
+
* 以及 agent 的步骤自述(「第 k 步…」「步骤完成:k/n」)。
|
|
147
|
+
* 用于在报告里还原「跑到哪一步、卡在哪一步」,而不是只给一个失败结论。
|
|
148
|
+
*/
|
|
149
|
+
export function extractTrace(transcript) {
|
|
150
|
+
const trace = [];
|
|
151
|
+
for (const raw of transcript.split(/\r?\n/)) {
|
|
152
|
+
const line = raw.trim();
|
|
153
|
+
if (!line)
|
|
154
|
+
continue;
|
|
155
|
+
if (/^\[(?:tool|tool-ok|tool-error|continue|agent-error)\b/.test(line)) {
|
|
156
|
+
trace.push(clip(line));
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
// agent 常把多步写在同一行,按「第 k 步」切分后逐条保留
|
|
160
|
+
for (const part of line.split(/(?=第\s*\d+\s*步)/)) {
|
|
161
|
+
const p = part.trim();
|
|
162
|
+
if (/第\s*\d+\s*步/.test(p) || /步骤完成\s*[::]/.test(p)) {
|
|
163
|
+
trace.push(clip(p));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return trace;
|
|
168
|
+
}
|
|
169
|
+
/** 最后一条 agent 的步骤自述(「第 k 步…」),用于说明卡点位置。 */
|
|
170
|
+
export function lastStepNote(trace) {
|
|
171
|
+
const notes = trace.filter((l) => /第\s*\d+\s*步/.test(l));
|
|
172
|
+
return notes.at(-1) ?? null;
|
|
173
|
+
}
|
|
174
|
+
/** 轨迹末尾若干条,拼成「轨迹末尾:…」的说明文本。 */
|
|
175
|
+
function tailTextOf(trace, n) {
|
|
176
|
+
if (trace.length === 0)
|
|
177
|
+
return null;
|
|
178
|
+
return `轨迹末尾:${trace.slice(-n).join(" → ")}`;
|
|
179
|
+
}
|
|
180
|
+
/** 截断过长的一行,避免报告被单条长文本撑爆。 */
|
|
181
|
+
function clip(text, max = 160) {
|
|
182
|
+
return text.length > max ? text.slice(0, max) + "…" : text;
|
|
183
|
+
}
|
|
108
184
|
/**
|
|
109
185
|
* 解析 agent 的进度声明「步骤完成:M/N」。
|
|
110
186
|
* 取最后一次声明:续跑时 agent 会输出多条进度,只有最后一条代表当前状态。
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|