@szc-ft/mcp-szcd-client 0.28.0 → 0.28.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/opencode-extension/skills/local-browser-test/SKILL.md +158 -32
  2. package/opencode-extension/skills/local-browser-test/lib/ant-adapter.js +716 -0
  3. package/opencode-extension/skills/local-browser-test/lib/browser-engine.js +2275 -0
  4. package/opencode-extension/skills/local-browser-test/lib/chrome-finder.js +125 -0
  5. package/opencode-extension/skills/local-browser-test/lib/expect.js +392 -0
  6. package/opencode-extension/skills/local-browser-test/lib/shared-deps.js +137 -0
  7. package/opencode-extension/skills/local-browser-test/lib/test-plan.js +48 -0
  8. package/opencode-extension/skills/local-browser-test/lib/visual-compare.js +192 -0
  9. package/opencode-extension/skills/local-browser-test/local-browser-executor.js +735 -0
  10. package/package.json +1 -1
  11. package/qwen-extension/qwen-extension.json +1 -1
  12. package/qwen-extension/skills/local-browser-test/SKILL.md +158 -32
  13. package/qwen-extension/skills/local-browser-test/lib/ant-adapter.js +716 -0
  14. package/qwen-extension/skills/local-browser-test/lib/browser-engine.js +2275 -0
  15. package/qwen-extension/skills/local-browser-test/lib/chrome-finder.js +125 -0
  16. package/qwen-extension/skills/local-browser-test/lib/expect.js +392 -0
  17. package/qwen-extension/skills/local-browser-test/lib/shared-deps.js +137 -0
  18. package/qwen-extension/skills/local-browser-test/lib/test-plan.js +48 -0
  19. package/qwen-extension/skills/local-browser-test/lib/visual-compare.js +192 -0
  20. package/qwen-extension/skills/local-browser-test/local-browser-executor.js +735 -0
  21. package/standard-skill/local-browser-test/SKILL.md +158 -32
  22. package/standard-skill/local-browser-test/lib/ant-adapter.js +716 -0
  23. package/standard-skill/local-browser-test/lib/browser-engine.js +2275 -0
  24. package/standard-skill/local-browser-test/lib/chrome-finder.js +125 -0
  25. package/standard-skill/local-browser-test/lib/expect.js +392 -0
  26. package/standard-skill/local-browser-test/lib/shared-deps.js +137 -0
  27. package/standard-skill/local-browser-test/lib/test-plan.js +48 -0
  28. package/standard-skill/local-browser-test/lib/visual-compare.js +192 -0
  29. package/standard-skill/local-browser-test/local-browser-executor.js +735 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@szc-ft/mcp-szcd-client",
3
- "version": "0.28.0",
3
+ "version": "0.28.2",
4
4
  "description": "MCP client for szcd component library - auto-configures AI coding tools with MCP server, skills, agents and commands",
5
5
  "keywords": [
6
6
  "mcp",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "szcd-component-helper",
3
- "version": "0.28.0",
3
+ "version": "0.28.2",
4
4
  "description": "szcd 组件库 MCP 助手 — 查询组件信息、匹配需求、生成代码",
5
5
  "mcpServers": {
6
6
  "szcd-component-helper": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: local-browser-test
3
- description: 本地浏览器测试工具,在用户本地 Chrome 中执行自动化测试。支持设计稿还原度对比(像素级评分)、功能验证(点击/输入/导航)、DOM 结构检查、JS 错误检测。通过 puppeteer-core 连接用户真实浏览器,天然继承登录态和微前端环境。
3
+ description: 在用户真实 Chrome 中执行自动化测试,覆盖 P0 用例批量执行、深度表单填写、微前端测试、长任务生命周期、设计稿对比、JS 错误诊断。通过 puppeteer-core 连接 CDP,天然继承登录态/微前端环境。
4
4
  compatibility:
5
5
  tools:
6
6
  - run_command
@@ -11,29 +11,155 @@ compatibility:
11
11
 
12
12
  ## 触发条件
13
13
 
14
- 当用户说出以下关键词时启动浏览器测试:
15
- - "测试一下"、"帮我验证"、"浏览器测试"、"接管浏览器"
16
- - "对比设计稿"、"还原度"、"看看效果"
17
- - "功能测试"、"能不能正常用"
18
- - "检查页面"、"页面渲染"
14
+ 当用户出现以下意图时启动:
19
15
 
20
- ## 主链路定位
16
+ **用例自动化(用 testCase DSL):**
17
+ - "执行 P0 用例" / "批量测试" / "测试用例自动化"
18
+ - "创建→审核→上线 全链路" / "生命周期测试"
19
+ - "表单填写验证" / "深度表单测试"
20
+
21
+ **轻量诊断(用 --action diagnose):**
22
+ - "测试一下" / "检查页面" / "看看效果" / "能不能正常用"
23
+ - "JS 错误" / "页面渲染" / "API 检查"
24
+
25
+ **视觉对比(用 --action compare):**
26
+ - "对比设计稿" / "还原度" / "像素对比"
27
+
28
+ ## ⚡ 路径解析(必读,避免 ad-hoc 脚本)
29
+
30
+ **执行器内置在 skill 目录中(自包含),会话开始时先解析 skill 路径:**
21
31
 
22
- local-browser-test 的长期主链路是:
32
+ ```bash
33
+ # 解析 skill 目录路径(执行器 + lib 都在 skill 目录内)
34
+ export SKILL_DIR=$(node -p "
35
+ const path = require('path');
36
+ // 尝试从 npm 包解析
37
+ try { return path.dirname(require.resolve('@szc-ft/mcp-szcd-client/standard-skill/local-browser-test/SKILL.md')); } catch {}
38
+ // 尝试从 IDE skill 目录查找
39
+ const os = require('os');
40
+ const candidates = [
41
+ path.join(os.homedir(), '.qwen/extensions/szcd-component-helper/skills/local-browser-test'),
42
+ path.join(os.homedir(), '.claude/skills/local-browser-test'),
43
+ path.join(os.homedir(), '.config/opencode/skills/local-browser-test'),
44
+ path.join(os.homedir(), '.trae-cn/skills/local-browser-test'),
45
+ path.join(os.homedir(), '.qoder/skills/local-browser-test'),
46
+ ];
47
+ for (const c of candidates) {
48
+ if (require('fs').existsSync(path.join(c, 'local-browser-executor.js'))) return c;
49
+ }
50
+ throw new Error('local-browser-test skill not found');
51
+ ")
52
+ echo "SKILL_DIR=$SKILL_DIR"
53
+
54
+ # 执行器路径
55
+ export EXECUTOR="$SKILL_DIR/local-browser-executor.js"
56
+ ```
57
+
58
+ 后续所有命令直接 `node "$EXECUTOR" --action ...`。
59
+
60
+ **执行器 + lib 内置在 skill 目录中,自带 Ant 适配层 + expect 断言 + testCase 引擎。禁止自己 require puppeteer 写脚本**——自写脚本会丢失:
61
+ - 微前端 frame 探活 + 自动召回
62
+ - `closeAllDropdowns` 跨 frame 清理
63
+ - Ant Select mousedown + VERIFY 回写
64
+ - testCase recovery 重试
65
+ - API 按 frame scope 过滤
66
+
67
+ ### 过渡兼容执行器
68
+
69
+ `local-browser-executor.cjs`(同目录)是 CommonJS 过渡版,仅支持基础诊断(diagnose/screenshot/list-pages/api-check/plan/snapshot/interact/perf/watch)。**Ant 适配层 / testCase DSL / expect 断言仅 `local-browser-executor.js`(ES Module 版)支持。** 优先用 `.js` 版本。
70
+
71
+ ## 🎯 三种典型任务(场景驱动)
72
+
73
+ ### 任务 A:P0 用例批量执行(首选)
74
+
75
+ 用户说"执行 P0 用例 / 批量测试 / 生命周期测试"时,**不要写 ad-hoc puppeteer 脚本**,构造 testCase JSON:
76
+
77
+ ```bash
78
+ cat > /tmp/case.json <<'EOF'
79
+ {
80
+ "title": "数据集创建 P0",
81
+ "setup": { "findFrame": { "contentContains": "数据集目录" } },
82
+ "dataset": [
83
+ { "name": "测试集A", "type": "图像" },
84
+ { "name": "测试集B", "type": "文本" }
85
+ ],
86
+ "steps": [
87
+ { "type": "formFill", "fields": [
88
+ { "label": "名称", "type": "input", "value": "{{name}}" },
89
+ { "label": "资源类型", "type": "select", "value": "{{type}}" },
90
+ { "label": "审核结果", "type": "radio", "value": "通过" }
91
+ ], "validateAfter": true },
92
+ { "type": "act", "click": "text=提 交" },
93
+ { "type": "expect", "assertion": "url.toContain", "value": "/list" },
94
+ { "type": "expect", "assertion": "api.toAllPass", "scope": "current-frame" }
95
+ ],
96
+ "recovery": { "maxRetriesPerStep": 2 }
97
+ }
98
+ EOF
99
+ node "$EXECUTOR" --action test-case --test-case-file /tmp/case.json --test-report /tmp/report.json
100
+ ```
101
+
102
+ dataset 数组每行跑一遍同样的 steps,`{{name}}` / `{{type}}` 自动替换。`setup.findFrame` 一次定位后所有步骤自动走子应用 frame(微前端默认行为)。
103
+
104
+ ### 任务 B:深度表单填写(Ant Design + 微前端)
105
+
106
+ 用户描述"填表单 / Select 选项 / TreeSelect / 挂接资源"时,用单步 antXxx 或 formFill:
107
+
108
+ ```bash
109
+ # 单字段
110
+ node "$EXECUTOR" --action act --frame-content-contains "数据集" \
111
+ --selector ant-select=资源类型 --click ... # ❌ 不要这样
112
+
113
+ # ✅ 用 testCase 的 antSelect 步骤(在 testCase.steps 内):
114
+ # { "type": "antSelect", "field": "资源类型", "option": "图像" }
115
+ # { "type": "antTreeSelect", "field": "分类", "path": ["AI", "视觉"] }
116
+ # { "type": "antInput", "placeholder": "挂接资源", "value": "abc" }
117
+ # { "type": "antRadio", "field": "审核结果", "option": "通过" }
118
+ # { "type": "formFill", "fields": [...], "validateAfter": true }
119
+ ```
120
+
121
+ **关键约束(执行器已内置,无需手写):**
122
+ - Ant Select 必须 mousedown(不是 click)
123
+ - 浮层异步渲染 15×200ms 轮询
124
+ - 每次操作前后 `closeAllDropdowns` 防串选
125
+ - VERIFY 回写检查 `.ant-select-selection-item`
126
+
127
+ ### 任务 C:轻量诊断(看页面是否正常)
128
+
129
+ ```bash
130
+ # 一次性看 JS 错误 + API 失败 + iframe 状态
131
+ node "$EXECUTOR" --action diagnose --url-contains "platform.aicityos.com" --wait 10000
132
+
133
+ # 仅看 API
134
+ node "$EXECUTOR" --action api-capture --url-contains "platform.aicityos.com" \
135
+ --url-pattern "/api/" --wait 10000 --include-response-body \
136
+ --output /tmp/api.json
137
+ ```
138
+
139
+ ---
140
+
141
+ ## 主链路定位
23
142
 
24
143
  ```
25
144
  Agent / SKILL.md
26
- szcd-mcp-client/local-browser-executor.js
27
- lib/browser-engine.js
145
+ testCase JSON ← P0 用例首选入口
146
+ $SKILL_DIR/local-browser-executor.js ($EXECUTOR)
147
+ → $SKILL_DIR/lib/browser-engine.js (executeTestCase + Ant 适配 + expect)
148
+ → $SKILL_DIR/lib/ant-adapter.js (Select/TreeSelect/Input/Radio/...)
149
+ → $SKILL_DIR/lib/expect.js (validation/locator/url/api + poll)
28
150
  → puppeteer-core + CDP
29
151
  → 用户真实 Chrome / Edge
30
152
  ```
31
153
 
32
- 目标是在用户真实登录态/真实微前端环境中形成 browser-use + Playwright 结合体:
33
- - browser-use 侧:`observe act → observe`,通过结构化页面观察和交互元素 index 支持自主任务执行。
34
- - Playwright 侧:locator、actionability、assert、plan 报告逐步收敛到 `BrowserEngine`。
154
+ 执行器 + lib 内置在 skill 目录中(自包含),`postinstall` 会把整个 skill 目录复制到各 IDE。
155
+ **禁止 AI 在用户机器上写 ad-hoc puppeteer 脚本**——会丢失:
156
+ - 微前端 frame 探活 + 自动召回
157
+ - `closeAllDropdowns` 跨 frame 清理
158
+ - Ant Select VERIFY 回写
159
+ - testCase recovery 重试
160
+ - API 按 frame scope 过滤
35
161
 
36
- `standard-skill/local-browser-test/local-browser-executor.cjs` 是过渡兼容执行器;新增稳定能力优先进入 `szcd-mcp-client/lib/browser-engine.js` 和根目录 `local-browser-executor.js`。
162
+ `local-browser-executor.cjs`(同目录)是 CommonJS 过渡版,仅支持基础诊断。**Ant 适配层 / testCase DSL / expect 断言仅 `local-browser-executor.js`(ES Module 版)支持。**
37
163
 
38
164
  ## 浏览器模式
39
165
 
@@ -218,7 +344,7 @@ wujie 微前端子应用渲染在 blob URL iframe 中,**坐标点击无法到
218
344
 
219
345
  ### 结构化观察(主链路起点)
220
346
  ```bash
221
- node {client_path}/local-browser-executor.js \
347
+ node "$EXECUTOR" \
222
348
  --action observe \
223
349
  --url-contains "platform.aicityos.com" \
224
350
  --frame-content-contains "数据集目录" \
@@ -230,7 +356,7 @@ node {client_path}/local-browser-executor.js \
230
356
 
231
357
  ### 观察后按 index 交互(主链路闭环)
232
358
  ```bash
233
- node {client_path}/local-browser-executor.js \
359
+ node "$EXECUTOR" \
234
360
  --action act \
235
361
  --url-contains "platform.aicityos.com" \
236
362
  --frame-content-contains "数据集目录" \
@@ -241,7 +367,7 @@ node {client_path}/local-browser-executor.js \
241
367
 
242
368
  ### 左侧菜单路径稳定点击
243
369
  ```bash
244
- node {client_path}/local-browser-executor.js \
370
+ node "$EXECUTOR" \
245
371
  --action act \
246
372
  --url-contains "platform.aicityos.com" \
247
373
  --menu-path "目录管理/数据集目录" \
@@ -253,7 +379,7 @@ node {client_path}/local-browser-executor.js \
253
379
 
254
380
  ### 轻量 DOM 断言
255
381
  ```bash
256
- node {client_path}/local-browser-executor.js \
382
+ node "$EXECUTOR" \
257
383
  --action assert \
258
384
  --url-contains "platform.aicityos.com" \
259
385
  --selector ".ant-table" \
@@ -264,7 +390,7 @@ node {client_path}/local-browser-executor.js \
264
390
 
265
391
  ### API 请求/响应捕获(真实浏览器 + 微前端)
266
392
  ```bash
267
- node {client_path}/local-browser-executor.js \
393
+ node "$EXECUTOR" \
268
394
  --action api-capture \
269
395
  --url-contains "platform.aicityos.com" \
270
396
  --frame-content-contains "数据集目录" \
@@ -279,7 +405,7 @@ node {client_path}/local-browser-executor.js \
279
405
 
280
406
  ### API 捕获结果断言
281
407
  ```bash
282
- node {client_path}/local-browser-executor.js \
408
+ node "$EXECUTOR" \
283
409
  --action assert-api \
284
410
  --capture-file /tmp/browser-api-capture.json \
285
411
  --max-failed 0 \
@@ -292,7 +418,7 @@ node {client_path}/local-browser-executor.js \
292
418
 
293
419
  ### 快速诊断(过渡兼容)
294
420
  ```bash
295
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
421
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
296
422
  --action diagnose \
297
423
  --url-contains "platform.aicityos.com" \
298
424
  --wait 15000 \
@@ -301,13 +427,13 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
301
427
 
302
428
  ### 列出所有标签页
303
429
  ```bash
304
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
430
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
305
431
  --action list-pages
306
432
  ```
307
433
 
308
434
  ### 检查 API 请求状态
309
435
  ```bash
310
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
436
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
311
437
  --action api-check \
312
438
  --url-contains "platform.aicityos.com" \
313
439
  --wait 15000
@@ -315,7 +441,7 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
315
441
 
316
442
  ### 截图
317
443
  ```bash
318
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
444
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
319
445
  --action screenshot \
320
446
  --url-contains "platform.aicityos.com" \
321
447
  --filename current-page.png \
@@ -324,7 +450,7 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
324
450
 
325
451
  ### 执行测试计划 JSON
326
452
  ```bash
327
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
453
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
328
454
  --action plan \
329
455
  --plan-file /tmp/test-plan.json \
330
456
  --output /tmp/browser-test-result.json
@@ -332,7 +458,7 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
332
458
 
333
459
  ### DOM 快照(结构化页面树,类似 browser-use take_snapshot)
334
460
  ```bash
335
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
461
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
336
462
  --action snapshot \
337
463
  --url-contains "platform.aicityos.com" \
338
464
  --depth 4 \
@@ -353,25 +479,25 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
353
479
  ### 智能交互(支持 text=、role=、~ 选择器,类似 Playwright)
354
480
  ```bash
355
481
  # 点击包含“构建”文本的按钮
356
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
482
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
357
483
  --action interact \
358
484
  --url-contains "jenkins" \
359
485
  --click "text=Build"
360
486
 
361
487
  # 在输入框中输入文本
362
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
488
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
363
489
  --action interact \
364
490
  --click "#search-input" \
365
491
  --type "hello world"
366
492
 
367
493
  # 悬停 + 截图
368
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
494
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
369
495
  --action interact \
370
496
  --hover "~ant-menu-item" \
371
497
  --screenshot-after
372
498
 
373
499
  # 滚动页面
374
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
500
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
375
501
  --action interact \
376
502
  --scroll down --scroll-amount 500
377
503
  ```
@@ -383,14 +509,14 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
383
509
 
384
510
  ### 性能指标采集(FCP/TTFB/资源统计)
385
511
  ```bash
386
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
512
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
387
513
  --action perf \
388
514
  --url-contains "platform.aicityos.com"
389
515
  ```
390
516
 
391
517
  ### 持续监控模式(定时截图 + 错误检测)
392
518
  ```bash
393
- NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor.cjs \
519
+ NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
394
520
  --action watch \
395
521
  --url-contains "platform.aicityos.com" \
396
522
  --interval 5000 \