@szc-ft/mcp-szcd-client 0.28.0 → 0.28.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.
@@ -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,122 @@ 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
+ - "对比设计稿" / "还原度" / "像素对比"
21
27
 
22
- local-browser-test 的长期主链路是:
28
+ ## ⚡ 路径解析(必读,避免 ad-hoc 脚本)
29
+
30
+ **所有命令使用 `$CLIENT_PATH` 变量,会话开始时先解析一次:**
31
+
32
+ ```bash
33
+ # 解析客户端安装路径(成功后所有命令复用此变量)
34
+ export CLIENT_PATH=$(node -p "require.resolve('@szc-ft/mcp-szcd-client/local-browser-executor.js')" 2>/dev/null \
35
+ || node -p "require('path').dirname(require.resolve('@szc-ft/mcp-szcd-client/package.json')) + '/local-browser-executor.js'")
36
+ echo "CLIENT_PATH=$CLIENT_PATH"
37
+ ```
38
+
39
+ 后续所有命令直接 `node "$CLIENT_PATH" --action ...`,**不要自己 require puppeteer 写脚本**——执行器已封装好 antSelect/formFill/expect/testCase 等步骤,自己写脚本会丢失微前端 frame 探活、closeAllDropdowns、verify 回写等保护。
40
+
41
+ ## 🎯 三种典型任务(场景驱动)
42
+
43
+ ### 任务 A:P0 用例批量执行(首选)
44
+
45
+ 用户说"执行 P0 用例 / 批量测试 / 生命周期测试"时,**不要写 ad-hoc puppeteer 脚本**,构造 testCase JSON:
46
+
47
+ ```bash
48
+ cat > /tmp/case.json <<'EOF'
49
+ {
50
+ "title": "数据集创建 P0",
51
+ "setup": { "findFrame": { "contentContains": "数据集目录" } },
52
+ "dataset": [
53
+ { "name": "测试集A", "type": "图像" },
54
+ { "name": "测试集B", "type": "文本" }
55
+ ],
56
+ "steps": [
57
+ { "type": "formFill", "fields": [
58
+ { "label": "名称", "type": "input", "value": "{{name}}" },
59
+ { "label": "资源类型", "type": "select", "value": "{{type}}" },
60
+ { "label": "审核结果", "type": "radio", "value": "通过" }
61
+ ], "validateAfter": true },
62
+ { "type": "act", "click": "text=提 交" },
63
+ { "type": "expect", "assertion": "url.toContain", "value": "/list" },
64
+ { "type": "expect", "assertion": "api.toAllPass", "scope": "current-frame" }
65
+ ],
66
+ "recovery": { "maxRetriesPerStep": 2 }
67
+ }
68
+ EOF
69
+ node "$CLIENT_PATH" --action test-case --test-case-file /tmp/case.json --test-report /tmp/report.json
70
+ ```
71
+
72
+ dataset 数组每行跑一遍同样的 steps,`{{name}}` / `{{type}}` 自动替换。`setup.findFrame` 一次定位后所有步骤自动走子应用 frame(微前端默认行为)。
73
+
74
+ ### 任务 B:深度表单填写(Ant Design + 微前端)
75
+
76
+ 用户描述"填表单 / Select 选项 / TreeSelect / 挂接资源"时,用单步 antXxx 或 formFill:
77
+
78
+ ```bash
79
+ # 单字段
80
+ node "$CLIENT_PATH" --action act --frame-content-contains "数据集" \
81
+ --selector ant-select=资源类型 --click ... # ❌ 不要这样
82
+
83
+ # ✅ 用 testCase 的 antSelect 步骤(在 testCase.steps 内):
84
+ # { "type": "antSelect", "field": "资源类型", "option": "图像" }
85
+ # { "type": "antTreeSelect", "field": "分类", "path": ["AI", "视觉"] }
86
+ # { "type": "antInput", "placeholder": "挂接资源", "value": "abc" }
87
+ # { "type": "antRadio", "field": "审核结果", "option": "通过" }
88
+ # { "type": "formFill", "fields": [...], "validateAfter": true }
89
+ ```
90
+
91
+ **关键约束(执行器已内置,无需手写):**
92
+ - Ant Select 必须 mousedown(不是 click)
93
+ - 浮层异步渲染 15×200ms 轮询
94
+ - 每次操作前后 `closeAllDropdowns` 防串选
95
+ - VERIFY 回写检查 `.ant-select-selection-item`
96
+
97
+ ### 任务 C:轻量诊断(看页面是否正常)
98
+
99
+ ```bash
100
+ # 一次性看 JS 错误 + API 失败 + iframe 状态
101
+ node "$CLIENT_PATH" --action diagnose --url-contains "platform.aicityos.com" --wait 10000
102
+
103
+ # 仅看 API
104
+ node "$CLIENT_PATH" --action api-capture --url-contains "platform.aicityos.com" \
105
+ --url-pattern "/api/" --wait 10000 --include-response-body \
106
+ --output /tmp/api.json
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 主链路定位
23
112
 
24
113
  ```
25
114
  Agent / SKILL.md
26
- szcd-mcp-client/local-browser-executor.js
27
- lib/browser-engine.js
115
+ testCase JSON ← P0 用例首选入口
116
+ szcd-mcp-client/local-browser-executor.js ($CLIENT_PATH)
117
+ → lib/browser-engine.js (executeTestCase + Ant 适配 + expect)
118
+ → lib/ant-adapter.js (Select/TreeSelect/Input/Radio/...)
119
+ → lib/expect.js (validation/locator/url/api + poll)
28
120
  → puppeteer-core + CDP
29
121
  → 用户真实 Chrome / Edge
30
122
  ```
31
123
 
32
- 目标是在用户真实登录态/真实微前端环境中形成 browser-use + Playwright 结合体:
33
- - browser-use 侧:`observe act → observe`,通过结构化页面观察和交互元素 index 支持自主任务执行。
34
- - Playwright 侧:locator、actionability、assert、plan 报告逐步收敛到 `BrowserEngine`。
35
-
36
- `standard-skill/local-browser-test/local-browser-executor.cjs` 是过渡兼容执行器;新增稳定能力优先进入 `szcd-mcp-client/lib/browser-engine.js` 和根目录 `local-browser-executor.js`。
124
+ 新增稳定能力优先进入 `lib/browser-engine.js` `lib/ant-adapter.js`,**禁止 AI 在用户机器上写 ad-hoc puppeteer 脚本**——会丢失:
125
+ - 微前端 frame 探活 + 自动召回
126
+ - `closeAllDropdowns` frame 清理
127
+ - Ant Select VERIFY 回写
128
+ - testCase recovery 重试
129
+ - API 按 frame scope 过滤
37
130
 
38
131
  ## 浏览器模式
39
132
 
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.1",
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.1",
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,122 @@ 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
+ - "对比设计稿" / "还原度" / "像素对比"
21
27
 
22
- local-browser-test 的长期主链路是:
28
+ ## ⚡ 路径解析(必读,避免 ad-hoc 脚本)
29
+
30
+ **所有命令使用 `$CLIENT_PATH` 变量,会话开始时先解析一次:**
31
+
32
+ ```bash
33
+ # 解析客户端安装路径(成功后所有命令复用此变量)
34
+ export CLIENT_PATH=$(node -p "require.resolve('@szc-ft/mcp-szcd-client/local-browser-executor.js')" 2>/dev/null \
35
+ || node -p "require('path').dirname(require.resolve('@szc-ft/mcp-szcd-client/package.json')) + '/local-browser-executor.js'")
36
+ echo "CLIENT_PATH=$CLIENT_PATH"
37
+ ```
38
+
39
+ 后续所有命令直接 `node "$CLIENT_PATH" --action ...`,**不要自己 require puppeteer 写脚本**——执行器已封装好 antSelect/formFill/expect/testCase 等步骤,自己写脚本会丢失微前端 frame 探活、closeAllDropdowns、verify 回写等保护。
40
+
41
+ ## 🎯 三种典型任务(场景驱动)
42
+
43
+ ### 任务 A:P0 用例批量执行(首选)
44
+
45
+ 用户说"执行 P0 用例 / 批量测试 / 生命周期测试"时,**不要写 ad-hoc puppeteer 脚本**,构造 testCase JSON:
46
+
47
+ ```bash
48
+ cat > /tmp/case.json <<'EOF'
49
+ {
50
+ "title": "数据集创建 P0",
51
+ "setup": { "findFrame": { "contentContains": "数据集目录" } },
52
+ "dataset": [
53
+ { "name": "测试集A", "type": "图像" },
54
+ { "name": "测试集B", "type": "文本" }
55
+ ],
56
+ "steps": [
57
+ { "type": "formFill", "fields": [
58
+ { "label": "名称", "type": "input", "value": "{{name}}" },
59
+ { "label": "资源类型", "type": "select", "value": "{{type}}" },
60
+ { "label": "审核结果", "type": "radio", "value": "通过" }
61
+ ], "validateAfter": true },
62
+ { "type": "act", "click": "text=提 交" },
63
+ { "type": "expect", "assertion": "url.toContain", "value": "/list" },
64
+ { "type": "expect", "assertion": "api.toAllPass", "scope": "current-frame" }
65
+ ],
66
+ "recovery": { "maxRetriesPerStep": 2 }
67
+ }
68
+ EOF
69
+ node "$CLIENT_PATH" --action test-case --test-case-file /tmp/case.json --test-report /tmp/report.json
70
+ ```
71
+
72
+ dataset 数组每行跑一遍同样的 steps,`{{name}}` / `{{type}}` 自动替换。`setup.findFrame` 一次定位后所有步骤自动走子应用 frame(微前端默认行为)。
73
+
74
+ ### 任务 B:深度表单填写(Ant Design + 微前端)
75
+
76
+ 用户描述"填表单 / Select 选项 / TreeSelect / 挂接资源"时,用单步 antXxx 或 formFill:
77
+
78
+ ```bash
79
+ # 单字段
80
+ node "$CLIENT_PATH" --action act --frame-content-contains "数据集" \
81
+ --selector ant-select=资源类型 --click ... # ❌ 不要这样
82
+
83
+ # ✅ 用 testCase 的 antSelect 步骤(在 testCase.steps 内):
84
+ # { "type": "antSelect", "field": "资源类型", "option": "图像" }
85
+ # { "type": "antTreeSelect", "field": "分类", "path": ["AI", "视觉"] }
86
+ # { "type": "antInput", "placeholder": "挂接资源", "value": "abc" }
87
+ # { "type": "antRadio", "field": "审核结果", "option": "通过" }
88
+ # { "type": "formFill", "fields": [...], "validateAfter": true }
89
+ ```
90
+
91
+ **关键约束(执行器已内置,无需手写):**
92
+ - Ant Select 必须 mousedown(不是 click)
93
+ - 浮层异步渲染 15×200ms 轮询
94
+ - 每次操作前后 `closeAllDropdowns` 防串选
95
+ - VERIFY 回写检查 `.ant-select-selection-item`
96
+
97
+ ### 任务 C:轻量诊断(看页面是否正常)
98
+
99
+ ```bash
100
+ # 一次性看 JS 错误 + API 失败 + iframe 状态
101
+ node "$CLIENT_PATH" --action diagnose --url-contains "platform.aicityos.com" --wait 10000
102
+
103
+ # 仅看 API
104
+ node "$CLIENT_PATH" --action api-capture --url-contains "platform.aicityos.com" \
105
+ --url-pattern "/api/" --wait 10000 --include-response-body \
106
+ --output /tmp/api.json
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 主链路定位
23
112
 
24
113
  ```
25
114
  Agent / SKILL.md
26
- szcd-mcp-client/local-browser-executor.js
27
- lib/browser-engine.js
115
+ testCase JSON ← P0 用例首选入口
116
+ szcd-mcp-client/local-browser-executor.js ($CLIENT_PATH)
117
+ → lib/browser-engine.js (executeTestCase + Ant 适配 + expect)
118
+ → lib/ant-adapter.js (Select/TreeSelect/Input/Radio/...)
119
+ → lib/expect.js (validation/locator/url/api + poll)
28
120
  → puppeteer-core + CDP
29
121
  → 用户真实 Chrome / Edge
30
122
  ```
31
123
 
32
- 目标是在用户真实登录态/真实微前端环境中形成 browser-use + Playwright 结合体:
33
- - browser-use 侧:`observe act → observe`,通过结构化页面观察和交互元素 index 支持自主任务执行。
34
- - Playwright 侧:locator、actionability、assert、plan 报告逐步收敛到 `BrowserEngine`。
35
-
36
- `standard-skill/local-browser-test/local-browser-executor.cjs` 是过渡兼容执行器;新增稳定能力优先进入 `szcd-mcp-client/lib/browser-engine.js` 和根目录 `local-browser-executor.js`。
124
+ 新增稳定能力优先进入 `lib/browser-engine.js` `lib/ant-adapter.js`,**禁止 AI 在用户机器上写 ad-hoc puppeteer 脚本**——会丢失:
125
+ - 微前端 frame 探活 + 自动召回
126
+ - `closeAllDropdowns` frame 清理
127
+ - Ant Select VERIFY 回写
128
+ - testCase recovery 重试
129
+ - API 按 frame scope 过滤
37
130
 
38
131
  ## 浏览器模式
39
132
 
@@ -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,122 @@ 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
+ - "对比设计稿" / "还原度" / "像素对比"
21
27
 
22
- local-browser-test 的长期主链路是:
28
+ ## ⚡ 路径解析(必读,避免 ad-hoc 脚本)
29
+
30
+ **所有命令使用 `$CLIENT_PATH` 变量,会话开始时先解析一次:**
31
+
32
+ ```bash
33
+ # 解析客户端安装路径(成功后所有命令复用此变量)
34
+ export CLIENT_PATH=$(node -p "require.resolve('@szc-ft/mcp-szcd-client/local-browser-executor.js')" 2>/dev/null \
35
+ || node -p "require('path').dirname(require.resolve('@szc-ft/mcp-szcd-client/package.json')) + '/local-browser-executor.js'")
36
+ echo "CLIENT_PATH=$CLIENT_PATH"
37
+ ```
38
+
39
+ 后续所有命令直接 `node "$CLIENT_PATH" --action ...`,**不要自己 require puppeteer 写脚本**——执行器已封装好 antSelect/formFill/expect/testCase 等步骤,自己写脚本会丢失微前端 frame 探活、closeAllDropdowns、verify 回写等保护。
40
+
41
+ ## 🎯 三种典型任务(场景驱动)
42
+
43
+ ### 任务 A:P0 用例批量执行(首选)
44
+
45
+ 用户说"执行 P0 用例 / 批量测试 / 生命周期测试"时,**不要写 ad-hoc puppeteer 脚本**,构造 testCase JSON:
46
+
47
+ ```bash
48
+ cat > /tmp/case.json <<'EOF'
49
+ {
50
+ "title": "数据集创建 P0",
51
+ "setup": { "findFrame": { "contentContains": "数据集目录" } },
52
+ "dataset": [
53
+ { "name": "测试集A", "type": "图像" },
54
+ { "name": "测试集B", "type": "文本" }
55
+ ],
56
+ "steps": [
57
+ { "type": "formFill", "fields": [
58
+ { "label": "名称", "type": "input", "value": "{{name}}" },
59
+ { "label": "资源类型", "type": "select", "value": "{{type}}" },
60
+ { "label": "审核结果", "type": "radio", "value": "通过" }
61
+ ], "validateAfter": true },
62
+ { "type": "act", "click": "text=提 交" },
63
+ { "type": "expect", "assertion": "url.toContain", "value": "/list" },
64
+ { "type": "expect", "assertion": "api.toAllPass", "scope": "current-frame" }
65
+ ],
66
+ "recovery": { "maxRetriesPerStep": 2 }
67
+ }
68
+ EOF
69
+ node "$CLIENT_PATH" --action test-case --test-case-file /tmp/case.json --test-report /tmp/report.json
70
+ ```
71
+
72
+ dataset 数组每行跑一遍同样的 steps,`{{name}}` / `{{type}}` 自动替换。`setup.findFrame` 一次定位后所有步骤自动走子应用 frame(微前端默认行为)。
73
+
74
+ ### 任务 B:深度表单填写(Ant Design + 微前端)
75
+
76
+ 用户描述"填表单 / Select 选项 / TreeSelect / 挂接资源"时,用单步 antXxx 或 formFill:
77
+
78
+ ```bash
79
+ # 单字段
80
+ node "$CLIENT_PATH" --action act --frame-content-contains "数据集" \
81
+ --selector ant-select=资源类型 --click ... # ❌ 不要这样
82
+
83
+ # ✅ 用 testCase 的 antSelect 步骤(在 testCase.steps 内):
84
+ # { "type": "antSelect", "field": "资源类型", "option": "图像" }
85
+ # { "type": "antTreeSelect", "field": "分类", "path": ["AI", "视觉"] }
86
+ # { "type": "antInput", "placeholder": "挂接资源", "value": "abc" }
87
+ # { "type": "antRadio", "field": "审核结果", "option": "通过" }
88
+ # { "type": "formFill", "fields": [...], "validateAfter": true }
89
+ ```
90
+
91
+ **关键约束(执行器已内置,无需手写):**
92
+ - Ant Select 必须 mousedown(不是 click)
93
+ - 浮层异步渲染 15×200ms 轮询
94
+ - 每次操作前后 `closeAllDropdowns` 防串选
95
+ - VERIFY 回写检查 `.ant-select-selection-item`
96
+
97
+ ### 任务 C:轻量诊断(看页面是否正常)
98
+
99
+ ```bash
100
+ # 一次性看 JS 错误 + API 失败 + iframe 状态
101
+ node "$CLIENT_PATH" --action diagnose --url-contains "platform.aicityos.com" --wait 10000
102
+
103
+ # 仅看 API
104
+ node "$CLIENT_PATH" --action api-capture --url-contains "platform.aicityos.com" \
105
+ --url-pattern "/api/" --wait 10000 --include-response-body \
106
+ --output /tmp/api.json
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 主链路定位
23
112
 
24
113
  ```
25
114
  Agent / SKILL.md
26
- szcd-mcp-client/local-browser-executor.js
27
- lib/browser-engine.js
115
+ testCase JSON ← P0 用例首选入口
116
+ szcd-mcp-client/local-browser-executor.js ($CLIENT_PATH)
117
+ → lib/browser-engine.js (executeTestCase + Ant 适配 + expect)
118
+ → lib/ant-adapter.js (Select/TreeSelect/Input/Radio/...)
119
+ → lib/expect.js (validation/locator/url/api + poll)
28
120
  → puppeteer-core + CDP
29
121
  → 用户真实 Chrome / Edge
30
122
  ```
31
123
 
32
- 目标是在用户真实登录态/真实微前端环境中形成 browser-use + Playwright 结合体:
33
- - browser-use 侧:`observe act → observe`,通过结构化页面观察和交互元素 index 支持自主任务执行。
34
- - Playwright 侧:locator、actionability、assert、plan 报告逐步收敛到 `BrowserEngine`。
35
-
36
- `standard-skill/local-browser-test/local-browser-executor.cjs` 是过渡兼容执行器;新增稳定能力优先进入 `szcd-mcp-client/lib/browser-engine.js` 和根目录 `local-browser-executor.js`。
124
+ 新增稳定能力优先进入 `lib/browser-engine.js` `lib/ant-adapter.js`,**禁止 AI 在用户机器上写 ad-hoc puppeteer 脚本**——会丢失:
125
+ - 微前端 frame 探活 + 自动召回
126
+ - `closeAllDropdowns` frame 清理
127
+ - Ant Select VERIFY 回写
128
+ - testCase recovery 重试
129
+ - API 按 frame scope 过滤
37
130
 
38
131
  ## 浏览器模式
39
132