pageqa 0.6.0 → 0.8.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 +77 -8
- package/dist/agent.d.ts +11 -1
- package/dist/agent.js +78 -102
- package/dist/agent.js.map +1 -1
- package/dist/bsk/tools.d.ts +61 -0
- package/dist/bsk/tools.js +239 -79
- package/dist/bsk/tools.js.map +1 -1
- package/dist/index.js +177 -10
- package/dist/index.js.map +1 -1
- package/dist/locator.d.ts +105 -0
- package/dist/locator.js +263 -0
- package/dist/locator.js.map +1 -0
- package/dist/record.d.ts +41 -0
- package/dist/record.js +166 -0
- package/dist/record.js.map +1 -0
- package/dist/replay.d.ts +190 -0
- package/dist/replay.js +550 -0
- package/dist/replay.js.map +1 -0
- package/dist/report.d.ts +41 -4
- package/dist/report.js +133 -5
- package/dist/report.js.map +1 -1
- package/dist/snapshot.d.ts +15 -0
- package/dist/snapshot.js +167 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/vars.d.ts +25 -0
- package/dist/vars.js +32 -0
- package/dist/vars.js.map +1 -1
- package/examples/smoke-test-page.html +531 -0
- package/examples/smoke-test.md +43 -0
- package/examples/smoke-test.replay.json +389 -0
- package/package.json +5 -3
package/dist/bsk/tools.d.ts
CHANGED
|
@@ -5,9 +5,70 @@ 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
|
+
/** 读取页面快照(已瘦身);期间无页面改动且间隔很短时复用上一份,不重新抓取。 */
|
|
20
|
+
snapshot(): string;
|
|
21
|
+
click(target: string): string;
|
|
22
|
+
fill(target: string, value: string): string;
|
|
23
|
+
upload(target: string | undefined, file: string): string;
|
|
24
|
+
hover(target: string): string;
|
|
25
|
+
scroll(target: string): string;
|
|
26
|
+
wait(ms: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* 断言页面是否包含期望文本:字面包含优先,字面未命中时(Jev 可用)才做语义复核。
|
|
29
|
+
*/
|
|
30
|
+
assertText(expectation: string): Promise<string>;
|
|
31
|
+
/** 最近一次 assertText 是否**靠 Jev 语义判断才成立**(供录制标记语义断言)。 */
|
|
32
|
+
lastAssertSemantic(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 最近一次 assertText 的**结构化结果**(期望值、成立与否、证据)。
|
|
35
|
+
*
|
|
36
|
+
* 报告用它做断言的准源:工具返回的「成立/不成立」是确定性的,而模型自述的措辞
|
|
37
|
+
* 千变万化(「…,断言成立。」这类写法既没有期望值也没法可靠解析),据此解析
|
|
38
|
+
* 会造成「实际已全部通过却报 0/N」的假失败。
|
|
39
|
+
*/
|
|
40
|
+
lastAssert(): AssertOutcome | null;
|
|
41
|
+
}
|
|
42
|
+
/** 一次 assert_text 的结构化结果。 */
|
|
43
|
+
export interface AssertOutcome {
|
|
44
|
+
/** 断言期望(模型传给 assert_text 的 expectation)。 */
|
|
45
|
+
expectation: string;
|
|
46
|
+
/** 是否成立。 */
|
|
47
|
+
pass: boolean;
|
|
48
|
+
/** 证据(页面里看到/没看到什么,或 Jev 语义匹配度)。 */
|
|
49
|
+
evidence: string;
|
|
50
|
+
}
|
|
51
|
+
export declare function createBskOps(session: string, jevClient?: JevClient): BskOps;
|
|
52
|
+
/** 工具层上报的一次执行(供录制回放脚本)。 */
|
|
53
|
+
export interface BskToolExec {
|
|
54
|
+
/** 工具名。 */
|
|
55
|
+
name: string;
|
|
56
|
+
/** 模型给出的入参。 */
|
|
57
|
+
params: Record<string, unknown>;
|
|
58
|
+
/** bsk 是否成功(失败的尝试不会被录进回放脚本)。 */
|
|
59
|
+
ok: boolean;
|
|
60
|
+
/** 本次操作**之前**页面最后一次快照文本。 */
|
|
61
|
+
lastSnapshot: string;
|
|
62
|
+
/** 断言是否靠 Jev 语义判断才成立(仅 assert_text 会上报该字段)。 */
|
|
63
|
+
semantic?: boolean;
|
|
64
|
+
/** 断言的结构化结果(仅 assert_text 成功时上报);报告据此判定,而非解析模型措辞。 */
|
|
65
|
+
assert?: AssertOutcome;
|
|
66
|
+
}
|
|
8
67
|
export interface BskToolOptions {
|
|
9
68
|
session: string;
|
|
10
69
|
jevClient?: JevClient;
|
|
70
|
+
/** 每次工具执行后的回调(录制回放脚本用)。 */
|
|
71
|
+
onExec?: (event: BskToolExec) => void;
|
|
11
72
|
}
|
|
12
73
|
/** 构造一组浏览器操作工具,供 page-test agent 调用。 */
|
|
13
74
|
export declare function createBskTools(opts: BskToolOptions): AgentTool[];
|
package/dist/bsk/tools.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { execFile, execFileSync, spawn } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { debugLog, info, timer } from "../log.js";
|
|
4
|
+
import { slimSnapshot } from "../snapshot.js";
|
|
4
5
|
/**
|
|
5
6
|
* browserskill(`bsk`)工具层:把 bsk CLI 命令包装成 pi-agent-core 的 AgentTool。
|
|
6
7
|
*
|
|
7
8
|
* bsk 连接一个已运行的真实浏览器,每个命令都需要 --session <id>。
|
|
8
9
|
* 所有命令以 --quiet 抑制进度输出,仅返回结构化/可读结果。
|
|
10
|
+
*
|
|
11
|
+
* 分两层:
|
|
12
|
+
* - `createBskOps`(操作层):每次浏览器操作 = 一条 bsk 命令,返回可读结果。
|
|
13
|
+
* - `createBskTools`(工具层):把操作层包成 agent 可调用的工具,并上报每次执行为录制提供素材。
|
|
14
|
+
* 回放(replay.ts)直接用操作层,因此「录制时怎么操作」与「回放时怎么操作」是同一条命令路径。
|
|
9
15
|
*/
|
|
10
16
|
const BSK_TIMEOUT_MS = 60_000;
|
|
11
17
|
function bsk(args) {
|
|
@@ -159,11 +165,232 @@ function paramsOf(properties, required = []) {
|
|
|
159
165
|
required,
|
|
160
166
|
};
|
|
161
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* 连续重复抓取的去重窗口:模型(或回放)在没有任何改页面动作的情况下又要素一份快照时,
|
|
170
|
+
* 直接给上一份,省掉一次 bsk 往返。窗口给得短——它要覆盖的只是「刚看过又要素」这种重复。
|
|
171
|
+
*/
|
|
172
|
+
const SNAPSHOT_DEDUP_MS = 1_000;
|
|
173
|
+
/**
|
|
174
|
+
* 断言可复用快照的窗口。
|
|
175
|
+
*
|
|
176
|
+
* 断言的「当下」比定位更敏感(页面可能已被异步更新),因此只在自上次快照以来
|
|
177
|
+
* 没有任何改页面动作、且间隔很短的条件下复用;窗口外的实情是「模型思考了足够久」,
|
|
178
|
+
* 此时宁可按原行为重新抓取。
|
|
179
|
+
*/
|
|
180
|
+
const SNAPSHOT_ASSERT_MS = 5_000;
|
|
181
|
+
export function createBskOps(session, jevClient) {
|
|
182
|
+
const quiet = ["--session", session, "--quiet"];
|
|
183
|
+
let snapshotText = "";
|
|
184
|
+
/** 同一份快照瘦身前的完整原文(assert_text 的字面匹配必须用它,见 ensureRawSnapshot)。 */
|
|
185
|
+
let snapshotRawText = "";
|
|
186
|
+
let assertSemantic = false;
|
|
187
|
+
let assertOutcome = null;
|
|
188
|
+
/** 最近一次快照的时刻与新鲜度(见 ensureSnapshot)。 */
|
|
189
|
+
let snapshotAt = 0;
|
|
190
|
+
let snapshotFresh = false;
|
|
191
|
+
/** 页面被本工具改动过(或刚刚等待过),之前的快照不再可信。 */
|
|
192
|
+
const markStale = () => {
|
|
193
|
+
snapshotFresh = false;
|
|
194
|
+
};
|
|
195
|
+
/** 真正抓一次快照:瘦身后交给模型,并按需记录瘦身统计。 */
|
|
196
|
+
const takeSnapshot = () => {
|
|
197
|
+
const raw = bsk(["snapshot", ...quiet]);
|
|
198
|
+
const slim = slimSnapshot(raw);
|
|
199
|
+
if (slim.applied) {
|
|
200
|
+
debugLog(`[bsk] snapshot 瘦身:${slim.before} -> ${slim.after} 字符` +
|
|
201
|
+
`(截断 ${slim.truncatedLines} 行、省略 ${slim.droppedLines} 行)`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// 快照体积直接决定上下文压力(长流程易因上下文超限被中断)
|
|
205
|
+
debugLog("[bsk] snapshot 字符数=" + raw.length);
|
|
206
|
+
}
|
|
207
|
+
snapshotRawText = raw;
|
|
208
|
+
snapshotText = slim.text;
|
|
209
|
+
snapshotAt = Date.now();
|
|
210
|
+
snapshotFresh = true;
|
|
211
|
+
return snapshotText;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* 取快照:自上次快照后页面**没有被本工具改动**、且间隔在 maxAgeMs 内时复用上一份。
|
|
215
|
+
*
|
|
216
|
+
* 所有会改动页面的操作(navigate/click/fill/upload/hover/scroll/wait)都会把快照置为
|
|
217
|
+
* 不新鲜,因此复用只可能发生在「纯读取之后」——最典型的是「刚 snapshot 完就断言」
|
|
218
|
+
* 或回放里「上一步是断言、下一步要定位」。页面自身异步更新导致的偏差由窗口兜住。
|
|
219
|
+
*/
|
|
220
|
+
const ensureSnapshot = (maxAgeMs, label) => {
|
|
221
|
+
const age = Date.now() - snapshotAt;
|
|
222
|
+
if (snapshotFresh && age <= maxAgeMs) {
|
|
223
|
+
debugLog(`[bsk] ${label} 复用 ${age}ms 前的快照(期间页面未被改动)`);
|
|
224
|
+
return snapshotText;
|
|
225
|
+
}
|
|
226
|
+
return takeSnapshot();
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* 同 ensureSnapshot,但返回**瘦身前**的完整原文。
|
|
230
|
+
*
|
|
231
|
+
* 断言的字面匹配必须基于完整快照:瘦身会截断长文本行、整行省略非关键文本,
|
|
232
|
+
* 拿瘦身文本做 includes,针对长页面文本的断言会假未命中,且证据不会说明漏看。
|
|
233
|
+
* 模型上下文仍吃瘦身文本,省 token 的收益不受影响。
|
|
234
|
+
*/
|
|
235
|
+
const ensureRawSnapshot = (maxAgeMs, label) => {
|
|
236
|
+
const age = Date.now() - snapshotAt;
|
|
237
|
+
if (snapshotFresh && age <= maxAgeMs) {
|
|
238
|
+
debugLog(`[bsk] ${label} 复用 ${age}ms 前的完整快照(期间页面未被改动)`);
|
|
239
|
+
return snapshotRawText;
|
|
240
|
+
}
|
|
241
|
+
takeSnapshot();
|
|
242
|
+
return snapshotRawText;
|
|
243
|
+
};
|
|
244
|
+
return {
|
|
245
|
+
session,
|
|
246
|
+
lastSnapshot: () => snapshotText,
|
|
247
|
+
lastAssertSemantic: () => assertSemantic,
|
|
248
|
+
lastAssert: () => assertOutcome,
|
|
249
|
+
navigate(url) {
|
|
250
|
+
markStale();
|
|
251
|
+
const out = bsk([
|
|
252
|
+
"navigate",
|
|
253
|
+
url,
|
|
254
|
+
...quiet,
|
|
255
|
+
"--wait-until",
|
|
256
|
+
"domcontentloaded",
|
|
257
|
+
]);
|
|
258
|
+
return `已导航到 ${url}\n${out}`;
|
|
259
|
+
},
|
|
260
|
+
snapshot() {
|
|
261
|
+
return ensureSnapshot(SNAPSHOT_DEDUP_MS, "snapshot");
|
|
262
|
+
},
|
|
263
|
+
click(target) {
|
|
264
|
+
markStale();
|
|
265
|
+
const out = bsk(["click", target, ...quiet]);
|
|
266
|
+
return `已点击 ${target}\n${out}`;
|
|
267
|
+
},
|
|
268
|
+
fill(target, value) {
|
|
269
|
+
markStale();
|
|
270
|
+
const out = bsk(["fill", target, "--value", value, ...quiet]);
|
|
271
|
+
return `已在 ${target} 填入文本\n${out}`;
|
|
272
|
+
},
|
|
273
|
+
upload(target, file) {
|
|
274
|
+
if (!existsSync(file)) {
|
|
275
|
+
throw new Error(`待上传文件不存在:${file}`);
|
|
276
|
+
}
|
|
277
|
+
markStale();
|
|
278
|
+
const args = ["upload"];
|
|
279
|
+
if (target)
|
|
280
|
+
args.push(target);
|
|
281
|
+
args.push("--file", file, ...quiet);
|
|
282
|
+
const out = bsk(args);
|
|
283
|
+
return `已上传文件 ${file}\n${out}`;
|
|
284
|
+
},
|
|
285
|
+
hover(target) {
|
|
286
|
+
markStale();
|
|
287
|
+
const out = bsk(["hover", target, ...quiet]);
|
|
288
|
+
return `已悬停 ${target}\n${out}`;
|
|
289
|
+
},
|
|
290
|
+
scroll(target) {
|
|
291
|
+
// scroll-to 同时支持 @eN 引用与 CSS 选择器。
|
|
292
|
+
// (早期实现用 evaluate + querySelector,遇到 @eN 会静默返回 element-not-found。)
|
|
293
|
+
markStale();
|
|
294
|
+
const out = bsk(["scroll-to", target, ...quiet]);
|
|
295
|
+
return `已滚动到 ${target}\n${out}`;
|
|
296
|
+
},
|
|
297
|
+
wait(ms) {
|
|
298
|
+
// wait-ms 是 daemon 端 sleep,不接受 --session。
|
|
299
|
+
// 等待本身就是为了让页面变化(异步渲染/动画/弹窗),因此必须置为不新鲜:
|
|
300
|
+
// 回放的「每步重试前重新取快照」正是靠它生效的。
|
|
301
|
+
markStale();
|
|
302
|
+
bsk(["wait-ms", String(ms)]);
|
|
303
|
+
return `已等待 ${ms}ms`;
|
|
304
|
+
},
|
|
305
|
+
async assertText(expectation) {
|
|
306
|
+
// 断言要的是「当下」+「完整」:只有在期间没有任何改页面动作、且间隔很短时才复用,
|
|
307
|
+
// 并且字面匹配基于瘦身前的完整快照(ensureRawSnapshot 里有原因说明)。
|
|
308
|
+
const snap = ensureRawSnapshot(SNAPSHOT_ASSERT_MS, "assert_text");
|
|
309
|
+
// 本次断言是否「靠语义判断才成立」,每次调用先重置:
|
|
310
|
+
// 只有字面未命中、由 Jev 复核判定成立的断言才为 true。
|
|
311
|
+
assertSemantic = false;
|
|
312
|
+
// 字面包含匹配即默认路径,也是 Jev 不可用时的回退;
|
|
313
|
+
// 结论与证据同时写进 assertOutcome,供报告直接取用(不依赖模型自述措辞)。
|
|
314
|
+
const literalHit = snap.includes(expectation);
|
|
315
|
+
const verdict = (pass, why) => {
|
|
316
|
+
assertOutcome = { expectation, pass, evidence: why };
|
|
317
|
+
return `断言「${expectation}」:${pass ? "成立" : "不成立"}。${why}`;
|
|
318
|
+
};
|
|
319
|
+
const literalWhy = literalHit
|
|
320
|
+
? `页面中包含「${expectation}」`
|
|
321
|
+
: `页面中未找到「${expectation}」`;
|
|
322
|
+
// 防御:快照为空或明显不是已加载页面 → 断言不成立。
|
|
323
|
+
// 浏览器页面还没打开时,bsk 返回的是空串/about:blank/错误信息,
|
|
324
|
+
// 此时不应信任 Jev 或直接判定「成立」(空页面不可能包含断言文本)。
|
|
325
|
+
const snapLen = snap.trim().length;
|
|
326
|
+
const SNAP_MIN_LEN = 30;
|
|
327
|
+
if (snapLen < SNAP_MIN_LEN) {
|
|
328
|
+
return verdict(false, `证据:页面快照为空或过短(${snapLen} 字符),页面可能尚未打开或未导航`);
|
|
329
|
+
}
|
|
330
|
+
// 1) 字面包含命中即成立:这是默认路径,也是绝大多数断言的真实情况。
|
|
331
|
+
// 命中时不再调用 Jev —— 省掉一次远端往返(超时上限 15s),
|
|
332
|
+
// 也避免引入「肉眼可见的文本被判成不成立」这类新的失败来源。
|
|
333
|
+
if (literalHit)
|
|
334
|
+
return verdict(true, literalWhy);
|
|
335
|
+
// 2) 字面未命中才请 Jev 复核:这正是语义判断有价值的场景
|
|
336
|
+
// (同义词/近义表达/格式差异导致的误报 FAIL)。
|
|
337
|
+
if (jevClient?.enabled) {
|
|
338
|
+
try {
|
|
339
|
+
const prob = await jevClient.assertText(snap, expectation);
|
|
340
|
+
const pass = prob >= jevClient.threshold;
|
|
341
|
+
// 靠语义复核才成立的断言,回放时字符串匹配必然不成立,需要标记
|
|
342
|
+
assertSemantic = pass;
|
|
343
|
+
const pct = (prob * 100).toFixed(1);
|
|
344
|
+
const threshold = (jevClient.threshold * 100).toFixed(0);
|
|
345
|
+
return verdict(pass, `字面未命中,语义匹配度 ${pct}%,${pass ? "超过" : "未达到"}阈值 ${threshold}%`);
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
// Jev 调用失败:回退到原有的字符串包含逻辑。
|
|
349
|
+
// 必须记录失败原因(超时/鉴权/网络等),否则用户只看到「Jev 不可用,已回退」,
|
|
350
|
+
// 却无法从 --debug 日志判断到底是哪一类故障。
|
|
351
|
+
debugLog("[bsk] Jev 断言失败,回退到字符串匹配:" +
|
|
352
|
+
(err instanceof Error ? err.message : String(err)));
|
|
353
|
+
return verdict(literalHit, `${literalWhy}(Jev 不可用,已回退)`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// 默认:字符串包含匹配
|
|
357
|
+
return verdict(false, literalWhy);
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
}
|
|
162
361
|
/** 构造一组浏览器操作工具,供 page-test agent 调用。 */
|
|
163
362
|
export function createBskTools(opts) {
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
363
|
+
const ops = createBskOps(opts.session, opts.jevClient);
|
|
364
|
+
/**
|
|
365
|
+
* 统一包装一次工具执行:拿到结果后上报给录制器,失败时先上报再抛出
|
|
366
|
+
* (抛出让 pi-agent-core 把该工具标记为错误,模型会据此重试)。
|
|
367
|
+
*/
|
|
368
|
+
const exec = async (name, params, fn) => {
|
|
369
|
+
const before = ops.lastSnapshot();
|
|
370
|
+
try {
|
|
371
|
+
const text = await fn();
|
|
372
|
+
const assertion = name === "assert_text" ? ops.lastAssert() : null;
|
|
373
|
+
opts.onExec?.({
|
|
374
|
+
name,
|
|
375
|
+
params,
|
|
376
|
+
ok: true,
|
|
377
|
+
lastSnapshot: before,
|
|
378
|
+
// 逐条上报「这条断言是否靠语义判断才成立」:录制层据此精确标记,
|
|
379
|
+
// 而不是按「整场是否启用 Jev」一刀切(字面命中的断言回放同样能通过)。
|
|
380
|
+
...(name === "assert_text"
|
|
381
|
+
? { semantic: ops.lastAssertSemantic() }
|
|
382
|
+
: {}),
|
|
383
|
+
// 结构化断言结果(期望值 + 成立与否 + 证据):报告直接取用,
|
|
384
|
+
// 不再从模型自述里反推(见 report.ts 的 buildReport)。
|
|
385
|
+
...(assertion ? { assert: assertion } : {}),
|
|
386
|
+
});
|
|
387
|
+
return ok(text);
|
|
388
|
+
}
|
|
389
|
+
catch (err) {
|
|
390
|
+
opts.onExec?.({ name, params, ok: false, lastSnapshot: before });
|
|
391
|
+
throw err;
|
|
392
|
+
}
|
|
393
|
+
};
|
|
167
394
|
const navigate = {
|
|
168
395
|
name: "navigate",
|
|
169
396
|
label: "Navigate",
|
|
@@ -173,14 +400,7 @@ export function createBskTools(opts) {
|
|
|
173
400
|
]),
|
|
174
401
|
execute: async (_id, params) => {
|
|
175
402
|
const p = params;
|
|
176
|
-
|
|
177
|
-
"navigate",
|
|
178
|
-
p.url,
|
|
179
|
-
...quiet,
|
|
180
|
-
"--wait-until",
|
|
181
|
-
"domcontentloaded",
|
|
182
|
-
]);
|
|
183
|
-
return ok(`已导航到 ${p.url}\n${out}`);
|
|
403
|
+
return exec("navigate", { url: p.url }, () => ops.navigate(p.url));
|
|
184
404
|
},
|
|
185
405
|
};
|
|
186
406
|
const snapshot = {
|
|
@@ -188,12 +408,7 @@ export function createBskTools(opts) {
|
|
|
188
408
|
label: "Snapshot",
|
|
189
409
|
description: "读取当前页面的 aria 语义树与可见文本(标题、段落、链接、按钮等)。用于读取内容、标题、文本并定位元素。",
|
|
190
410
|
parameters: paramsOf({}),
|
|
191
|
-
execute: async () => {
|
|
192
|
-
const out = bsk(["snapshot", ...quiet]);
|
|
193
|
-
// 快照体积直接决定上下文压力(长流程易因上下文超限被中断)
|
|
194
|
-
debugLog("[bsk] snapshot 字符数=" + out.length);
|
|
195
|
-
return ok(out);
|
|
196
|
-
},
|
|
411
|
+
execute: async () => exec("snapshot", {}, () => ops.snapshot()),
|
|
197
412
|
};
|
|
198
413
|
const click = {
|
|
199
414
|
name: "click",
|
|
@@ -202,8 +417,7 @@ export function createBskTools(opts) {
|
|
|
202
417
|
parameters: paramsOf({ target: { type: "string", description: "@eN 引用或 CSS 选择器" } }, ["target"]),
|
|
203
418
|
execute: async (_id, params) => {
|
|
204
419
|
const p = params;
|
|
205
|
-
|
|
206
|
-
return ok(`已点击 ${p.target}\n${out}`);
|
|
420
|
+
return exec("click", { target: p.target }, () => ops.click(p.target));
|
|
207
421
|
},
|
|
208
422
|
};
|
|
209
423
|
const fill = {
|
|
@@ -216,8 +430,7 @@ export function createBskTools(opts) {
|
|
|
216
430
|
}, ["target", "value"]),
|
|
217
431
|
execute: async (_id, params) => {
|
|
218
432
|
const p = params;
|
|
219
|
-
|
|
220
|
-
return ok(`已在 ${p.target} 填入文本\n${out}`);
|
|
433
|
+
return exec("fill", { target: p.target, value: p.value }, () => ops.fill(p.target, p.value));
|
|
221
434
|
},
|
|
222
435
|
};
|
|
223
436
|
const upload = {
|
|
@@ -237,15 +450,7 @@ export function createBskTools(opts) {
|
|
|
237
450
|
}, ["file"]),
|
|
238
451
|
execute: async (_id, params) => {
|
|
239
452
|
const p = params;
|
|
240
|
-
|
|
241
|
-
throw new Error(`待上传文件不存在:${p.file}`);
|
|
242
|
-
}
|
|
243
|
-
const args = ["upload"];
|
|
244
|
-
if (p.target)
|
|
245
|
-
args.push(p.target);
|
|
246
|
-
args.push("--file", p.file, ...quiet);
|
|
247
|
-
const out = bsk(args);
|
|
248
|
-
return ok(`已上传文件 ${p.file}\n${out}`);
|
|
453
|
+
return exec("upload", p.target ? { target: p.target, file: p.file } : { file: p.file }, () => ops.upload(p.target, p.file));
|
|
249
454
|
},
|
|
250
455
|
};
|
|
251
456
|
const hover = {
|
|
@@ -255,8 +460,7 @@ export function createBskTools(opts) {
|
|
|
255
460
|
parameters: paramsOf({ target: { type: "string", description: "@eN 引用或 CSS 选择器" } }, ["target"]),
|
|
256
461
|
execute: async (_id, params) => {
|
|
257
462
|
const p = params;
|
|
258
|
-
|
|
259
|
-
return ok(`已悬停 ${p.target}\n${out}`);
|
|
463
|
+
return exec("hover", { target: p.target }, () => ops.hover(p.target));
|
|
260
464
|
},
|
|
261
465
|
};
|
|
262
466
|
const scroll = {
|
|
@@ -266,9 +470,7 @@ export function createBskTools(opts) {
|
|
|
266
470
|
parameters: paramsOf({ target: { type: "string", description: "@eN 引用或 CSS 选择器" } }, ["target"]),
|
|
267
471
|
execute: async (_id, params) => {
|
|
268
472
|
const p = params;
|
|
269
|
-
|
|
270
|
-
const res = bsk(["evaluate", js, ...quiet]);
|
|
271
|
-
return ok(res);
|
|
473
|
+
return exec("scroll", { target: p.target }, () => ops.scroll(p.target));
|
|
272
474
|
},
|
|
273
475
|
};
|
|
274
476
|
const wait = {
|
|
@@ -279,9 +481,7 @@ export function createBskTools(opts) {
|
|
|
279
481
|
execute: async (_id, params) => {
|
|
280
482
|
const p = params ?? {};
|
|
281
483
|
const ms = p.ms ?? 1000;
|
|
282
|
-
|
|
283
|
-
bsk(["wait-ms", String(ms)]);
|
|
284
|
-
return ok(`已等待 ${ms}ms`);
|
|
484
|
+
return exec("wait", { ms }, () => ops.wait(ms));
|
|
285
485
|
},
|
|
286
486
|
};
|
|
287
487
|
const assertText = {
|
|
@@ -293,47 +493,7 @@ export function createBskTools(opts) {
|
|
|
293
493
|
}, ["expectation"]),
|
|
294
494
|
execute: async (_id, params) => {
|
|
295
495
|
const p = params;
|
|
296
|
-
|
|
297
|
-
// 防御:快照为空或明显不是已加载页面 → 断言不成立。
|
|
298
|
-
// 浏览器页面还没打开时,bsk 返回的是空串/about:blank/错误信息,
|
|
299
|
-
// 此时不应信任 Jev 或直接判定「成立」(空页面不可能包含断言文本)。
|
|
300
|
-
const snapLen = snap.trim().length;
|
|
301
|
-
const SNAP_MIN_LEN = 30;
|
|
302
|
-
if (snapLen < SNAP_MIN_LEN) {
|
|
303
|
-
return ok(`断言「${p.expectation}」:不成立。证据:页面快照为空或过短(${snapLen} 字符),页面可能尚未打开或未导航`);
|
|
304
|
-
}
|
|
305
|
-
// 当 Jev 客户端可用时,使用语义判断替代字符串包含匹配
|
|
306
|
-
if (jevClient?.enabled) {
|
|
307
|
-
try {
|
|
308
|
-
const prob = await jevClient.assertText(snap, p.expectation);
|
|
309
|
-
const pass = prob >= jevClient.threshold;
|
|
310
|
-
const verdict = pass ? "成立" : "不成立";
|
|
311
|
-
const evidence = pass
|
|
312
|
-
? `语义匹配度 ${(prob * 100).toFixed(1)}%,超过阈值 ${(jevClient.threshold * 100).toFixed(0)}%`
|
|
313
|
-
: `语义匹配度 ${(prob * 100).toFixed(1)}%,未达到阈值 ${(jevClient.threshold * 100).toFixed(0)}%`;
|
|
314
|
-
return ok(`断言「${p.expectation}」:${verdict}。${evidence}`);
|
|
315
|
-
}
|
|
316
|
-
catch (err) {
|
|
317
|
-
// Jev 调用失败:回退到原有的字符串包含逻辑。
|
|
318
|
-
// 必须记录失败原因(超时/鉴权/网络等),否则用户只看到「Jev 不可用,已回退」,
|
|
319
|
-
// 却无法从 --debug 日志判断到底是哪一类故障。
|
|
320
|
-
debugLog("[bsk] Jev 断言失败,回退到字符串匹配:" +
|
|
321
|
-
(err instanceof Error ? err.message : String(err)));
|
|
322
|
-
const hit = snap.includes(p.expectation);
|
|
323
|
-
const verdict = hit ? "成立" : "不成立";
|
|
324
|
-
const evidence = hit
|
|
325
|
-
? `页面中包含「${p.expectation}」`
|
|
326
|
-
: `页面中未找到「${p.expectation}」`;
|
|
327
|
-
return ok(`断言「${p.expectation}」:${verdict}。${evidence}(Jev 不可用,已回退)`);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
// 默认:字符串包含匹配
|
|
331
|
-
const hit = snap.includes(p.expectation);
|
|
332
|
-
const verdict = hit ? "成立" : "不成立";
|
|
333
|
-
const evidence = hit
|
|
334
|
-
? `页面中包含「${p.expectation}」`
|
|
335
|
-
: `页面中未找到「${p.expectation}」`;
|
|
336
|
-
return ok(`断言「${p.expectation}」:${verdict}。${evidence}`);
|
|
496
|
+
return exec("assert_text", { expectation: p.expectation }, () => ops.assertText(p.expectation));
|
|
337
497
|
},
|
|
338
498
|
};
|
|
339
499
|
return [
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;;;;GAUG;AAEH,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,SAAS,GAAG,CAAC,IAAc;IACzB,gCAAgC;IAChC,uCAAuC;IACvC,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;IACrB,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;YACpC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,GAAyC,CAAC;QACpD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,+CAA+C,CAChD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,cAAc,cAAc,GAAG,IAAI,8BAA8B;gBAC/D,mDAAmD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACtE,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,KAAK,EACL,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACpB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,EACjE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,GAAwB,CAAC;gBACnC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACxB,MAAM,CACJ,IAAI,KAAK,CACP,+CAA+C,CAChD,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAY,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sCAAsC;AACtC,KAAK,UAAU,qBAAqB;IAClC,MAAM,MAAM,GAAG,CAAC,MAAM,kBAAkB,EAAE,CAAoC,CAAC;IAC/E,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAChC,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW;IAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;YAC9C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC3D,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,IAAI,MAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YACtC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,qCAAqC;gBACrC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,IAAI,CACF,2BAA2B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1E,CAAC;gBACF,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC1B,MAAM,CACJ,IAAI,KAAK,CACP,yDAAyD,CAC1D,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,QAAQ,CACN,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACrE,CAAC;YACF,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,YAAY,GAAyB,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;QACzB,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,qBAAqB,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,oCAAoC;gBAClC,2DAA2D,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,4CAA4C;AAC5C,SAAS,EAAE,CAAC,IAAY;IACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CACf,UAAmC,EACnC,WAAqB,EAAE;IAEvB,yEAAyE;IACzE,0DAA0D;IAC1D,4BAA4B;IAC5B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ;KAC6B,CAAC;AAC1C,CAAC;AA+CD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,SAAqB;IACjE,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,gEAAgE;IAChE,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAAa,GAAyB,IAAI,CAAC;IAC/C,uCAAuC;IACvC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,mCAAmC;IACnC,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC,CAAC;IAEF,iCAAiC;IACjC,MAAM,YAAY,GAAG,GAAW,EAAE;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,QAAQ,CACN,qBAAqB,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,KAAK;gBACpD,OAAO,IAAI,CAAC,cAAc,SAAS,IAAI,CAAC,YAAY,KAAK,CAC5D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,QAAQ,CAAC,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,eAAe,GAAG,GAAG,CAAC;QACtB,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,aAAa,GAAG,IAAI,CAAC;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAU,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QACpC,IAAI,aAAa,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YACrC,QAAQ,CAAC,SAAS,KAAK,OAAO,GAAG,mBAAmB,CAAC,CAAC;YACtD,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAU,EAAE;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QACpC,IAAI,aAAa,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YACrC,QAAQ,CACN,SAAS,KAAK,OAAO,GAAG,qBAAqB,CAC9C,CAAC;YACF,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,YAAY,EAAE,CAAC;QACf,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY;QAChC,kBAAkB,EAAE,GAAG,EAAE,CAAC,cAAc;QACxC,UAAU,EAAE,GAAG,EAAE,CAAC,aAAa;QAE/B,QAAQ,CAAC,GAAW;YAClB,SAAS,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC;gBACd,UAAU;gBACV,GAAG;gBACH,GAAG,KAAK;gBACR,cAAc;gBACd,kBAAkB;aACnB,CAAC,CAAC;YACH,OAAO,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;QAC/B,CAAC;QAED,QAAQ;YACN,OAAO,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,MAAc;YAClB,SAAS,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YAC7C,OAAO,OAAO,MAAM,KAAK,GAAG,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,MAAc,EAAE,KAAa;YAChC,SAAS,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YAC9D,OAAO,MAAM,MAAM,UAAU,GAAG,EAAE,CAAC;QACrC,CAAC;QAED,MAAM,CAAC,MAA0B,EAAE,IAAY;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,SAAS,IAAI,KAAK,GAAG,EAAE,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,MAAc;YAClB,SAAS,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YAC7C,OAAO,OAAO,MAAM,KAAK,GAAG,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,CAAC,MAAc;YACnB,kCAAkC;YAClC,mEAAmE;YACnE,SAAS,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YACjD,OAAO,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,EAAU;YACb,0CAA0C;YAC1C,uCAAuC;YACvC,0BAA0B;YAC1B,SAAS,EAAE,CAAC;YACZ,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,OAAO,EAAE,IAAI,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,WAAmB;YAClC,2CAA2C;YAC3C,8CAA8C;YAC9C,MAAM,IAAI,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;YAClE,4BAA4B;YAC5B,kCAAkC;YAClC,cAAc,GAAG,KAAK,CAAC;YACvB,8BAA8B;YAC9B,8CAA8C;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,GAAW,EAAU,EAAE;gBACrD,aAAa,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;gBACrD,OAAO,MAAM,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;YAC5D,CAAC,CAAC;YACF,MAAM,UAAU,GAAG,UAAU;gBAC3B,CAAC,CAAC,SAAS,WAAW,GAAG;gBACzB,CAAC,CAAC,UAAU,WAAW,GAAG,CAAC;YAE7B,6BAA6B;YAC7B,0CAA0C;YAC1C,sCAAsC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;YACnC,MAAM,YAAY,GAAG,EAAE,CAAC;YACxB,IAAI,OAAO,GAAG,YAAY,EAAE,CAAC;gBAC3B,OAAO,OAAO,CACZ,KAAK,EACL,gBAAgB,OAAO,mBAAmB,CAC3C,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,wCAAwC;YACxC,mCAAmC;YACnC,IAAI,UAAU;gBAAE,OAAO,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEjD,kCAAkC;YAClC,gCAAgC;YAChC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,SAAS,CAAC,SAAS,CAAC;oBACzC,iCAAiC;oBACjC,cAAc,GAAG,IAAI,CAAC;oBACtB,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACzD,OAAO,OAAO,CACZ,IAAI,EACJ,eAAe,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,SAAS,GAAG,CAC7D,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,0BAA0B;oBAC1B,4CAA4C;oBAC5C,6BAA6B;oBAC7B,QAAQ,CACN,0BAA0B;wBACxB,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACrD,CAAC;oBACF,OAAO,OAAO,CAAC,UAAU,EAAE,GAAG,UAAU,eAAe,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,aAAa;YACb,OAAO,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAyBD,wCAAwC;AACxC,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEvD;;;OAGG;IACH,MAAM,IAAI,GAAG,KAAK,EAChB,IAAY,EACZ,MAA+B,EAC/B,EAAkC,EAClC,EAAE;QACF,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI;gBACJ,MAAM;gBACN,EAAE,EAAE,IAAI;gBACR,YAAY,EAAE,MAAM;gBACpB,kCAAkC;gBAClC,uCAAuC;gBACvC,GAAG,CAAC,IAAI,KAAK,aAAa;oBACxB,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,kBAAkB,EAAE,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;gBACP,mCAAmC;gBACnC,yCAAyC;gBACzC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C,CAAC,CAAC;YACH,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAc;QAC1B,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,yDAAyD;QAC3D,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;YACvE,KAAK;SACN,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAmB,CAAC;YAC9B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAc;QAC1B,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,wDAAwD;QAC1D,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE,CAClB,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;KAC7C,CAAC;IAEF,MAAM,KAAK,GAAc;QACvB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,gCAAgC;QAC7C,UAAU,EAAE,QAAQ,CAClB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,EAC9D,CAAC,QAAQ,CAAC,CACX;QACD,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAsB,CAAC;YACjC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;IAEF,MAAM,IAAI,GAAc;QACtB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,0BAA0B;QACvC,UAAU,EAAE,QAAQ,CAClB;YACE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;SACjD,EACD,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB;QACD,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAoB,CAAC;YAC/B,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAC7D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAC5B,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,MAAM,MAAM,GAAc;QACxB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,yDAAyD;YACzD,mEAAmE;YACnE,gCAAgC;YAChC,4CAA4C;YAC5C,gCAAgC;QAClC,UAAU,EAAE,QAAQ,CAClB;YACE,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,6CAA6C;aAChD;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;SACtD,EACD,CAAC,MAAM,CAAC,CACT;QACD,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAsB,CAAC;YACjC,OAAO,IAAI,CACT,QAAQ,EACR,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAChE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CACnC,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,MAAM,KAAK,GAAc;QACvB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,QAAQ,CAClB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,EAC9D,CAAC,QAAQ,CAAC,CACX;QACD,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAsB,CAAC;YACjC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;IAEF,MAAM,MAAM,GAAc;QACxB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,QAAQ,CAClB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,EAC9D,CAAC,QAAQ,CAAC,CACX;QACD,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAsB,CAAC;YACjC,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;KACF,CAAC;IAEF,MAAM,IAAI,GAAc;QACtB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,sBAAsB;QACnC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAI,MAAqB,IAAI,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;IAEF,MAAM,UAAU,GAAc;QAC5B,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,kDAAkD;QACpD,UAAU,EAAE,QAAQ,CAClB;YACE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;SAC5D,EACD,CAAC,aAAa,CAAC,CAChB;QACD,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,MAAe,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,MAAsB,CAAC;YACjC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAC9D,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAC9B,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,IAAI;QACJ,MAAM;QACN,KAAK;QACL,MAAM;QACN,IAAI;QACJ,UAAU;KACX,CAAC;AACJ,CAAC;AAuBD,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,IAAI,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,EAAE,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrD,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,CAAC,oBAAoB,OAAO,sBAAsB,CAAC,CAAC;QAC5D,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7C,QAAQ,CAAC,iBAAiB,OAAO,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,4BAA4B,OAAO,YAAY,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CACF,2BAA2B,OAAO,eAAe;YAC/C,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,SAAS,eAAe,CAAC,EAAU;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|