@mearl/client 3.0.0-beta.0 → 3.0.0-beta.10

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 (74) hide show
  1. package/README.md +333 -255
  2. package/README.zh-CN.md +612 -0
  3. package/dist/actionTimeouts.js +0 -3
  4. package/dist/autoUpdate.js +3 -1
  5. package/dist/bin.js +12 -5
  6. package/dist/capabilityHelp.d.ts +4 -0
  7. package/dist/capabilityHelp.js +68 -0
  8. package/dist/check.d.ts +5 -6
  9. package/dist/check.js +2 -5
  10. package/dist/cli.js +29 -56
  11. package/dist/commandHelp.d.ts +3 -0
  12. package/dist/commandHelp.js +79 -0
  13. package/dist/commandSuggestions.d.ts +3 -0
  14. package/dist/commandSuggestions.js +16 -5
  15. package/dist/commands.d.ts +70 -65
  16. package/dist/commands.js +60 -55
  17. package/dist/guide.d.ts +46 -0
  18. package/dist/guide.js +80 -0
  19. package/dist/guides/api-browser-setup.md +93 -0
  20. package/dist/guides/api-page-automation.md +140 -0
  21. package/dist/guides/api-page-debugging.md +39 -0
  22. package/dist/guides/api-page-environment.md +37 -0
  23. package/dist/guides/api-request-debugging.md +54 -0
  24. package/dist/guides/browser-tool-cooperation.md +23 -0
  25. package/dist/guides/core.md +60 -0
  26. package/dist/guides/related-skills.md +51 -0
  27. package/dist/guides/scripting.md +21 -0
  28. package/dist/guides/troubleshooting.md +170 -0
  29. package/dist/index.d.ts +5 -2
  30. package/dist/index.js +8 -5
  31. package/dist/nativeHost.d.ts +2 -2
  32. package/dist/nativeHost.js +2 -4
  33. package/dist/plugins/clients/pluginHostConnection.d.ts +2 -0
  34. package/dist/plugins/clients/pluginHostConnection.js +3 -1
  35. package/dist/plugins/officialPluginInstaller.js +2 -1
  36. package/dist/plugins/pluginRegistry.d.ts +1 -1
  37. package/dist/plugins/pluginRegistry.js +21 -7
  38. package/dist/plugins/runtime/pluginCommandWorker.js +8 -6
  39. package/dist/plugins/runtime/pluginDiagnostics.js +1 -1
  40. package/dist/plugins/runtime/pluginExecutor.d.ts +5 -0
  41. package/dist/plugins/runtime/pluginExecutor.js +15 -2
  42. package/dist/plugins/runtime/pluginExecutorProtocol.d.ts +4 -0
  43. package/dist/plugins/runtime/pluginExecutorSupervisor.js +2 -1
  44. package/dist/plugins/runtime/pluginHostServer.js +5 -1
  45. package/dist/plugins/runtime/pluginPageManager.js +2 -6
  46. package/dist/plugins/runtime/pluginRevision.js +0 -51
  47. package/dist/plugins/runtime/pluginStateManager.js +1 -1
  48. package/dist/plugins/runtime/pluginStateStore.js +3 -8
  49. package/dist/plugins/runtime/pluginTaskManager.js +5 -9
  50. package/dist/plugins/sdk/plugin.d.ts +9 -0
  51. package/dist/plugins/sdk/plugin.js +22 -9
  52. package/dist/plugins/sdk/pluginModelDefinition.js +0 -6
  53. package/dist/plugins/sdk/pluginPageDefinition.d.ts +0 -1
  54. package/dist/plugins/sdk/pluginPageDefinition.js +2 -18
  55. package/dist/plugins/sdk/pluginRecoveryDefinition.js +0 -3
  56. package/dist/plugins/sdk/pluginStateDefinition.d.ts +0 -1
  57. package/dist/plugins/sdk/pluginStateDefinition.js +0 -11
  58. package/dist/runtimePaths.d.ts +1 -0
  59. package/dist/runtimePaths.js +1 -0
  60. package/dist/script.d.ts +30 -0
  61. package/dist/script.js +261 -0
  62. package/dist/scriptCli.d.ts +1 -0
  63. package/dist/scriptCli.js +94 -0
  64. package/dist/scriptErrors.d.ts +8 -0
  65. package/dist/scriptErrors.js +21 -0
  66. package/dist/scriptWorker.d.ts +1 -0
  67. package/dist/scriptWorker.js +50 -0
  68. package/dist/sdkMethods.d.ts +3 -0
  69. package/dist/sdkMethods.js +9 -0
  70. package/dist/socket.js +33 -8
  71. package/dist/unified.js +11 -1
  72. package/dist/unifiedConfig.d.ts +4 -0
  73. package/dist/unifiedConfig.js +11 -0
  74. package/package.json +18 -11
@@ -14,6 +14,8 @@ export interface CommandDef {
14
14
  summary?: string;
15
15
  /** CLI 中用于推荐 canonical action 的常见表达,不会作为可执行 action。 */
16
16
  aliases?: readonly string[];
17
+ /** 仅用于错误建议;按表达给出 canonical action 的适用示例,不增加可执行别名。 */
18
+ aliasExamples?: Readonly<Record<string, string>>;
17
19
  /** payload 字段说明 */
18
20
  params?: ParamDef[];
19
21
  /** 是否支持 --output */
@@ -23,6 +25,16 @@ export interface CommandDef {
23
25
  result?: readonly string[];
24
26
  }
25
27
  export declare const COMMANDS: readonly [{
28
+ readonly name: "get_capabilities";
29
+ readonly description: "只读查询当前目标浏览器的动作、设备和已安装 App 能力、限制与 Skill/帮助入口;不打开页面或启用模拟";
30
+ readonly params: [{
31
+ readonly name: "app";
32
+ readonly type: "string";
33
+ readonly description: "可选,使用目录中的完整 App ID 查询桥方法、可调设置和默认版本详情";
34
+ }];
35
+ readonly notes: readonly ["沿用 --browser / --session 路由;不传 app 返回摘要。apps.status=partial 表示目录未完整取得,unsupported 表示目标未提供目录;不能把两者当作未安装。", "available=false 的 App 当前不可启用;支持某个 action 不代表已有域名权限或真实设备授权。按需读取 usage.skills / usage.documentation,查询不会自动安装或加载 Skill。"];
36
+ readonly examples: ["get_capabilities", "get_capabilities --payload '{\"app\":\"example/app\"}'"];
37
+ }, {
26
38
  readonly name: "browser_control";
27
39
  readonly description: "把控制会话交给用户;用户在 Mearl 浏览器管理页交还后重新观察页面";
28
40
  readonly params: [{
@@ -76,7 +88,7 @@ export declare const COMMANDS: readonly [{
76
88
  readonly examples: ["tab_checkpoint --payload '{\"tabId\":12345}'"];
77
89
  }, {
78
90
  readonly name: "get_requests";
79
- readonly description: "获取最近的网络请求(mtop 或普通 xhr/fetch)";
91
+ readonly description: "获取最近的网络请求(协议请求或普通 xhr/fetch)";
80
92
  readonly params: [{
81
93
  readonly name: "tabId";
82
94
  readonly type: "number";
@@ -88,8 +100,8 @@ export declare const COMMANDS: readonly [{
88
100
  readonly description: "返回条数,默认 10";
89
101
  }, {
90
102
  readonly name: "source";
91
- readonly type: "\"mtop\" | \"requests\" | \"all\"";
92
- readonly description: "数据来源,不填时默认 mtop;all 返回全部业务请求";
103
+ readonly type: "\"protocol\" | \"requests\" | \"all\"";
104
+ readonly description: "数据来源,不填时默认 all;all 返回全部业务请求";
93
105
  }, {
94
106
  readonly name: "filter";
95
107
  readonly type: "string";
@@ -123,9 +135,9 @@ export declare const COMMANDS: readonly [{
123
135
  readonly type: "boolean";
124
136
  readonly description: "只返回数据结构,不返回叶子值";
125
137
  }];
126
- readonly notes: readonly ["流式请求开始后即进入缓冲区;页面及 App 桥代发的 MTop SSE 都归入 mtop。无法归属当前页面 target 的 Service Worker 请求不在采集范围内。"];
138
+ readonly notes: readonly ["流式请求开始后即进入缓冲区;页面及 App 桥代发的 协议 SSE 都归入 protocol。无法归属当前页面 target 的 Service Worker 请求不在采集范围内。"];
127
139
  readonly result: readonly ["nextCursor 用于同类查询续读,hasMore 表示还有数据,gap 表示缓冲区淘汰造成缺口;checkpoint cursor 可分别用于三类查询的初始边界。", "省略正文时不返回 postData / responseBody 字段;指定 fields 后需要同时读取全文时显式传 includeBody:true。", "isPending 标记未完成请求;SSE 的 responseBody 保存按序到达的 event/data/timestamp/duration 分片。敏感请求头返回脱敏值。"];
128
- readonly examples: ["get_requests --payload '{\"tabId\":12345,\"count\":5}'", "get_requests --payload '{\"tabId\":12345,\"source\":\"mtop\",\"filter\":\"cart\"}'"];
140
+ readonly examples: ["get_requests --payload '{\"tabId\":12345,\"count\":5}'", "get_requests --payload '{\"tabId\":12345,\"source\":\"protocol\",\"filter\":\"cart\"}'"];
129
141
  }, {
130
142
  readonly name: "get_logs";
131
143
  readonly description: "获取浏览器控制台日志";
@@ -232,7 +244,7 @@ export declare const COMMANDS: readonly [{
232
244
  readonly description: "请求 query/body 字段子集匹配;$index 从 0 开始指定调用顺序";
233
245
  }];
234
246
  readonly notes: readonly ["启用时至少提供 mockData 或非空 fields;非空 fields 优先。fields 每项 { path: string, value: any },path 支持点号和数组索引。", "相同 apiName 的多条无条件 Mock 会覆盖;conditions 子集匹配 query/body(含 data 内层),不同条件可共存;$index 从 0 起控制调用顺序,不参与字段匹配。", "大字段可用顶层 @<绝对路径> 文件引用或 --payload-file;文件展开后仍受 Native Messaging 单条消息大小限制。"];
235
- readonly examples: ["set_mock --payload '{\"tabId\":12345,\"apiName\":\"mtop.cart.query\",\"mockData\":{\"ret\":[\"SUCCESS::调用成功\"]}}'", "set_mock --payload-file ./mock-data.json"];
247
+ readonly examples: ["set_mock --payload '{\"tabId\":12345,\"apiName\":\"cart.query\",\"mockData\":{\"ret\":[\"SUCCESS::调用成功\"]}}'", "set_mock --payload-file ./mock-data.json"];
236
248
  }, {
237
249
  readonly name: "get_mocks";
238
250
  readonly description: "查看当前生效的 mock 列表";
@@ -297,7 +309,7 @@ export declare const COMMANDS: readonly [{
297
309
  readonly type: "string";
298
310
  readonly description: "规则说明";
299
311
  }];
300
- readonly notes: readonly ["扩展模式规则持久化;CDP 仅支持会话级 modifyHeaders 请求头 set,不支持响应头、initiatorDomains 或其他动作。Provider 是否支持以其能力声明为准。", "扩展模式会检查规则请求 URL 和显式来源域名的访问权限;缺失时仍保存规则,返回 warnings 和 missingOrigins,不自动弹窗。可在请求规则页面授权,或按提示调用 request_domain_permission。复杂 URL 表达式无法完整推断域名时会提示手动检查。"];
312
+ readonly notes: readonly ["扩展模式规则持久化;CDP 仅支持会话级 modifyHeaders 请求头 set,不支持响应头、initiatorDomains 或其他动作。Provider 是否支持以其能力声明为准。", "扩展模式会检查规则请求 URL 和显式来源域名的访问权限;缺失时仍保存规则,返回 warnings 和 missingOrigins,不自动弹窗。可在请求规则页面授权,或按提示调用 request_permission。复杂 URL 表达式无法完整推断域名时会提示手动检查。"];
301
313
  readonly examples: ["set_rule --payload '{\"actionType\":\"block\",\"filter\":\"^https://example\\\\.com/ads/.*\"}'", "set_rule --payload '{\"ruleId\":42,\"enabled\":false}'"];
302
314
  }, {
303
315
  readonly name: "get_rules";
@@ -357,46 +369,19 @@ export declare const COMMANDS: readonly [{
357
369
  readonly result: readonly ["返回 status、statusText、headers、body、bodyType、attachedCookieCount;bodyType 为 json/text/base64,二进制 body 需解码后保存。"];
358
370
  readonly examples: ["send_request --payload '{\"url\":\"https://api.example.com/data\",\"method\":\"GET\"}'", "send_request --payload '{\"url\":\"https://api.example.com/upload\",\"method\":\"POST\",\"formData\":{\"folder\":\"assets\"},\"files\":[{\"fieldName\":\"file\",\"filePath\":\"/absolute/path/image.png\"}]}'", "send_request --payload '{\"url\":\"https://api.example.com/upload\",\"method\":\"POST\",\"bodyFile\":{\"filePath\":\"/absolute/path/image.png\",\"contentType\":\"image/png\"}}'"];
359
371
  }, {
360
- readonly name: "send_mtop_request";
361
- readonly description: "使用目标浏览器 Cookie 发起 mtop 请求,自动处理签名和 token";
372
+ readonly name: "browser_list";
373
+ readonly description: "列出所有浏览器及其连接状态、类型和 Provider 托管实例信息";
374
+ readonly summary: "列出本地及远端浏览器与连接状态";
362
375
  readonly params: [{
363
- readonly name: "api";
376
+ readonly name: "provider";
364
377
  readonly type: "string";
365
- readonly required: true;
366
- readonly description: "mtop API 名称";
378
+ readonly description: "配合 launchForm,仅查询一个本机已安装 Provider 的启动候选;需 --local";
367
379
  }, {
368
- readonly name: "data";
380
+ readonly name: "launchForm";
369
381
  readonly type: "object";
370
- readonly description: "请求数据";
371
- }, {
372
- readonly name: "version";
373
- readonly type: "string";
374
- readonly description: "API 版本,默认 1.0";
375
- }, {
376
- readonly name: "method";
377
- readonly type: "string";
378
- readonly description: "HTTP 方法,默认 GET";
379
- }, {
380
- readonly name: "appKey";
381
- readonly type: "string";
382
- readonly description: "签名使用的 appKey,默认 12574478";
383
- }, {
384
- readonly name: "env";
385
- readonly type: "\"prod\" | \"pre\"";
386
- readonly description: "请求环境,默认 prod";
387
- }, {
388
- readonly name: "timeout";
389
- readonly type: "number";
390
- readonly description: "超时毫秒数,默认 10000";
382
+ readonly description: "现有动态启动表单请求:{variant?,values:{}},不创建或接入实例";
391
383
  }];
392
- readonly notes: readonly ["需要目标浏览器有对应登录态;Mearl 自动处理签名,不依赖页面脚本。api 以 mopen. 开头时使用 mopen 协议。", "env=prod 使用 h5api.m.taobao.com,pre 使用 h5api.wapa.taobao.com。"];
393
- readonly result: readonly ["返回 success、response、requestData;业务成功需检查 response.ret。"];
394
- readonly examples: ["send_mtop_request --payload '{\"api\":\"mtop.trade.order.detail\",\"data\":{\"orderId\":\"123\"}}'"];
395
- }, {
396
- readonly name: "browser_list";
397
- readonly description: "列出所有浏览器及其连接状态、类型和 Provider 托管实例信息";
398
- readonly summary: "列出本地及远端浏览器与连接状态";
399
- readonly examples: ["browser_list"];
384
+ readonly examples: ["browser_list", "browser_list --local"];
400
385
  }, {
401
386
  readonly name: "browser_release";
402
387
  readonly description: "释放当前浏览器的调试控制和会话级临时效果(含设备/时区模拟);不用于普通任务收尾,Provider 实例的行为以 mearl <providerId> 为准";
@@ -479,6 +464,9 @@ export declare const COMMANDS: readonly [{
479
464
  readonly name: "tab_open";
480
465
  readonly description: "打开或按 URL 规则复用 Tab,并等待新页面加载完成";
481
466
  readonly aliases: readonly ["tab_new", "new_tab", "tab_create", "create_tab"];
467
+ readonly aliasExamples: {
468
+ readonly tab_activate: "tab_open --payload '{\"url\":\"https://example.com\",\"reuse\":\"require\",\"active\":true}'";
469
+ };
482
470
  readonly params: [{
483
471
  readonly name: "url";
484
472
  readonly type: "string";
@@ -519,7 +507,7 @@ export declare const COMMANDS: readonly [{
519
507
  }, {
520
508
  readonly name: "appProfile";
521
509
  readonly type: "string";
522
- readonly description: "按已安装档案应用 App 环境;内置基础档案只提供 UA/版本,完整桥由能力包提供。需要 iframe WebView 和系统栏时同时传 emulation.deviceShell=true";
510
+ readonly description: "按已安装档案应用 App 环境,ID 与限制见当前动态帮助。需要 iframe WebView 和系统栏时同时传 emulation.deviceShell=true";
523
511
  }, {
524
512
  readonly name: "os";
525
513
  readonly type: "\"ios\" | \"android\"";
@@ -531,7 +519,7 @@ export declare const COMMANDS: readonly [{
531
519
  }];
532
520
  readonly notes: readonly ["emulation / appProfile 只应用到新建 Tab;复用 Tab 要切换状态时用对应设置 action。", "closeExisting 不能与复用或 openerTabId 组合;多匹配默认报错,match.onMultiple=first 可显式选择第一个。"];
533
521
  readonly result: readonly ["返回 tabId、url、title、opened/reused;reused=true 的既有页面应保留。", "active=true 时 activation 包含 tabActive、windowFocused、windowState、visibilityState;emulation 返回实际生效配置。", "capture.cursor 是导航前诊断边界,可分别用于 get_logs/get_requests/get_events 的 after。"];
534
- readonly examples: ["tab_open --payload '{\"url\":\"https://example.com\"}'", "tab_open --payload '{\"url\":\"https://example.com/page\",\"reuse\":\"prefer\",\"match\":{\"ignoreSearch\":true}}'", "tab_open --payload '{\"url\":\"https://m.example.com\",\"emulation\":{\"preset\":\"iphone-17-pro\"}}'", "tab_open --payload '{\"url\":\"https://example.com/app/home\",\"appProfile\":\"fliggy\"}'", "tab_open --payload '{\"url\":\"https://example.com/app/home\",\"appProfile\":\"fliggy\",\"emulation\":{\"preset\":\"ipad-mini-a17-pro\",\"orientation\":\"landscape\",\"deviceShell\":true,\"splitScreen\":true}}'", "tab_open --payload '{\"url\":\"https://example.com\",\"appProfile\":\"fliggy\",\"os\":\"android\"}'", "tab_open --payload '{\"url\":\"https://example.com\",\"group\":\"验证任务\"}'"];
522
+ readonly examples: ["tab_open --payload '{\"url\":\"https://example.com\"}'", "tab_open --payload '{\"url\":\"https://example.com/page\",\"reuse\":\"prefer\",\"match\":{\"ignoreSearch\":true}}'", "tab_open --payload '{\"url\":\"https://m.example.com\",\"emulation\":{\"preset\":\"iphone-17-pro\"}}'", "tab_open --payload '{\"url\":\"https://example.com/app/home\",\"appProfile\":\"reader\"}'", "tab_open --payload '{\"url\":\"https://example.com/app/home\",\"appProfile\":\"reader\",\"emulation\":{\"preset\":\"ipad-mini-a17-pro\",\"orientation\":\"landscape\",\"deviceShell\":true,\"splitScreen\":true}}'", "tab_open --payload '{\"url\":\"https://example.com\",\"appProfile\":\"reader\",\"os\":\"android\"}'", "tab_open --payload '{\"url\":\"https://example.com\",\"group\":\"验证任务\"}'"];
535
523
  }, {
536
524
  readonly name: "tab_close";
537
525
  readonly description: "关闭指定标签页";
@@ -571,6 +559,9 @@ export declare const COMMANDS: readonly [{
571
559
  }, {
572
560
  readonly name: "page_click";
573
561
  readonly description: "点击页面元素,支持 CSS/@ref、可见文本或视口坐标定位";
562
+ readonly aliasExamples: {
563
+ readonly page_select: "page_click --payload '{\"tabId\":12345,\"text\":\"选项文案\",\"role\":\"option\"}'";
564
+ };
574
565
  readonly params: [{
575
566
  readonly name: "selector";
576
567
  readonly type: "string";
@@ -613,8 +604,8 @@ export declare const COMMANDS: readonly [{
613
604
  readonly required: true;
614
605
  readonly description: "目标标签页 ID";
615
606
  }];
616
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
617
- readonly notes: readonly ["selector / text / point 必须且只能提供一个。隐藏页 auto 使用 DOM;只有明确依赖真实用户手势时才激活页面。", "原生 select 可按 option 文本点击;checkbox/radio 返回 controlState.checkedBefore/checkedAfter。"];
607
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
608
+ readonly notes: readonly ["selector / text / point 必须且只能提供一个。隐藏页 auto 使用 DOM;只有明确依赖真实用户手势时才激活页面。", "auto 对原生 option、checkbox/radio 使用状态感知的 DOM 路径;显式 mouse/touch 保留可信输入。", "原生 select 可按 option 文本点击;auto/dom 返回 selectionState.valueBefore/valueAfter/selectedAfter,检查选中状态是否保持。checkbox/radio 返回 controlState.checkedBefore/checkedAfter。"];
618
609
  readonly examples: ["page_click --payload '{\"tabId\":12345,\"text\":\"提交\"}'", "page_click --payload '{\"tabId\":12345,\"text\":\"退款明细\",\"role\":\"button\"}'", "page_click --payload '{\"tabId\":12345,\"text\":\"确定\",\"scope\":\"@e12\"}'", "page_click --payload '{\"tabId\":12345,\"selector\":\"@e3\"}'", "page_click --payload '{\"tabId\":12345,\"selector\":\".submit-btn\"}'", "page_click --payload '{\"tabId\":12345,\"selector\":\".gesture-btn\",\"clickMode\":\"touch\"}'", "page_click --payload '{\"tabId\":12345,\"point\":{\"x\":336,\"y\":117}}'", "page_click --payload '{\"tabId\":12345,\"point\":{\"x\":196,\"y\":240},\"coordinateSpace\":\"active-frame\"}'"];
619
610
  }, {
620
611
  readonly name: "page_drag";
@@ -643,12 +634,15 @@ export declare const COMMANDS: readonly [{
643
634
  readonly required: true;
644
635
  readonly description: "目标标签页 ID";
645
636
  }];
646
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
637
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
647
638
  readonly notes: readonly ["起点会自动滚入视口,终点必须同时位于当前视口;否则先滚动页面。隐藏页 auto 使用 DOM,不切换活动页。"];
648
639
  readonly examples: ["page_drag --payload '{\"tabId\":12345,\"from\":{\"x\":350,\"y\":80},\"to\":{\"x\":80,\"y\":80}}'", "page_drag --payload '{\"tabId\":12345,\"from\":\"@e3\",\"to\":\"#drop-zone\",\"dragMode\":\"mouse\"}'"];
649
640
  }, {
650
641
  readonly name: "page_type";
651
642
  readonly description: "向输入框填写文本,兼容 React 受控组件";
643
+ readonly aliasExamples: {
644
+ readonly page_fill: "page_type --payload '{\"tabId\":12345,\"selector\":\"@e6\",\"text\":\"填写内容\",\"clearFirst\":true}'";
645
+ };
652
646
  readonly params: [{
653
647
  readonly name: "selector";
654
648
  readonly type: "string";
@@ -669,7 +663,7 @@ export declare const COMMANDS: readonly [{
669
663
  readonly required: true;
670
664
  readonly description: "目标标签页 ID";
671
665
  }];
672
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
666
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
673
667
  readonly examples: ["page_type --payload '{\"tabId\":12345,\"selector\":\"@e6\",\"text\":\"搜索关键词\"}'"];
674
668
  }, {
675
669
  readonly name: "page_hover";
@@ -685,7 +679,7 @@ export declare const COMMANDS: readonly [{
685
679
  readonly required: true;
686
680
  readonly description: "目标标签页 ID";
687
681
  }];
688
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
682
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
689
683
  readonly examples: ["page_hover --payload '{\"tabId\":12345,\"selector\":\".nav-menu\"}'"];
690
684
  }, {
691
685
  readonly name: "page_scroll";
@@ -713,7 +707,7 @@ export declare const COMMANDS: readonly [{
713
707
  readonly required: true;
714
708
  readonly description: "目标标签页 ID";
715
709
  }];
716
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。", "action.data 返回 moved、atTop/atBottom、scrollYBefore/After、maxScrollY、resolvedContainer 和 ancestorDistance;自动发现的内部容器提供可复用 containerSelector。"];
710
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。", "action.data 返回 moved、atTop/atBottom、scrollYBefore/After、maxScrollY、resolvedContainer 和 ancestorDistance;自动发现的内部容器提供可复用 containerSelector。"];
717
711
  readonly examples: ["page_scroll --payload '{\"tabId\":12345,\"direction\":\"down\"}'", "page_scroll --payload '{\"tabId\":12345,\"direction\":\"bottom\"}'", "page_scroll --payload '{\"tabId\":12345,\"selector\":\".virtual-list\",\"direction\":\"down\",\"distance\":800}'", "page_scroll --payload '{\"tabId\":12345,\"selector\":\"@e8\",\"containerPolicy\":\"nearest\",\"direction\":\"bottom\"}'"];
718
712
  }, {
719
713
  readonly name: "page_runtime";
@@ -810,6 +804,14 @@ export declare const COMMANDS: readonly [{
810
804
  readonly name: "modifiers";
811
805
  readonly type: "string[]";
812
806
  readonly description: "修饰键数组:ctrl/alt/shift/meta/cmd";
807
+ }, {
808
+ readonly name: "dialogId";
809
+ readonly type: "string";
810
+ readonly description: "原生弹窗回执或 page_snapshot 中的 dialog.id;仅配合 Enter 接受或 Escape 取消";
811
+ }, {
812
+ readonly name: "promptText";
813
+ readonly type: "string";
814
+ readonly description: "仅用于 dialogId + Enter 接受原生 prompt 时填写文本";
813
815
  }, {
814
816
  readonly name: "pressMode";
815
817
  readonly type: "\"auto\" | \"dom\" | \"keyboard\"";
@@ -820,8 +822,8 @@ export declare const COMMANDS: readonly [{
820
822
  readonly required: true;
821
823
  readonly description: "目标标签页 ID";
822
824
  }];
823
- readonly notes: readonly ["隐藏页 DOM 模式支持 Tab 焦点移动、原生控件 Enter/Space 激活和输入框 Enter 提交;编辑、选择、方向键和页面滚动等原生行为需可见页与 pressMode=keyboard。"];
824
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。", "action.data.dispatchMode / fallbackReason / defaultAction 说明实际输入路径。"];
825
+ readonly notes: readonly ["隐藏页 DOM 模式支持 Tab 焦点移动、原生控件 Enter/Space 激活和输入框 Enter 提交;编辑、选择、方向键和页面滚动等原生行为需可见页与 pressMode=keyboard。", "原生 alert/confirm/prompt/beforeunload 弹窗需显式传 dialogId;普通 Enter 不处理弹窗。弹窗处理绕过 DOM 观察,不自动重放被中断的动作;处理后重新读取页面。"];
826
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。", "action.data.dispatchMode / fallbackReason / defaultAction 说明实际输入路径。"];
825
827
  readonly examples: ["page_press --payload '{\"tabId\":12345,\"key\":\"Enter\"}'"];
826
828
  }, {
827
829
  readonly name: "page_wait";
@@ -864,11 +866,14 @@ export declare const COMMANDS: readonly [{
864
866
  readonly required: true;
865
867
  readonly description: "目标标签页 ID";
866
868
  }];
867
- readonly notes: readonly ["time / selector / text / condition 必须且只能提供一个;time 范围 0–60000ms。页面交互已有内置观察,仅在需要独立等待条件时使用。"];
869
+ readonly notes: readonly ["time / selector / text / condition 必须且只能提供一个;time 范围 0–60000ms。页面交互已有内置观察,仅在需要独立等待条件时使用。", "等待后须立即执行已知动作时,用 mearl run 在同一脚本中 await pageWait 后紧接 pageClick,避免模型往返。整体 --timeout 须覆盖等待及后续动作;等待失败不继续点击。"];
868
870
  readonly examples: ["page_wait --payload '{\"tabId\":12345,\"time\":1000}'", "page_wait --payload '{\"tabId\":12345,\"selector\":\".dialog\",\"state\":\"visible\"}'", "page_wait --payload '{\"tabId\":12345,\"selector\":\".loading\",\"state\":\"hidden\"}'", "page_wait --payload '{\"tabId\":12345,\"text\":\"提交成功\"}'", "page_wait --payload '{\"tabId\":12345,\"condition\":\"window.appReady === true\",\"timeout\":30000}'"];
869
871
  }, {
870
872
  readonly name: "page_navigate";
871
873
  readonly description: "在当前标签页内导航到 URL、刷新页面,或沿浏览历史后退/前进";
874
+ readonly aliasExamples: {
875
+ readonly page_reload: "page_navigate --payload '{\"tabId\":12345,\"refresh\":true}'";
876
+ };
872
877
  readonly params: [{
873
878
  readonly name: "url";
874
879
  readonly type: "string";
@@ -911,7 +916,7 @@ export declare const COMMANDS: readonly [{
911
916
  readonly required: true;
912
917
  readonly description: "目标标签页 ID";
913
918
  }];
914
- readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。失败以退出码 1 结束。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
919
+ readonly result: readonly ["默认返回 { action, observation };action.success 只表示动作成功,业务效果需结合 observation 和目标状态判断。", "observe=false 且未开启 diagnostics 时返回裸动作结果(如 { clicked: true }),没有 action/observation;开启 diagnostics 时返回 { action, diagnostics }。", "包装结果中的 action.stage=precondition 表示未派发,省略 observation/diagnostics;dispatch-uncertain 表示可能已派发,先查看 action.attempt 与可用观察或最小快照核验,避免重复提交。CLI 单次调用失败以退出码 1 结束;脚本需检查 action.success。", "observation.effects 返回通知、控件和焦点增量,可直接复用 node.ref/selector;changed=true 且 effects 为空不表示失败。", "effects.texts 按需返回普通可见文本的 selector/text,不代表可点击控件或业务成功;超限或覆盖不完整时仍提示补快照。", "fullSnapshotRecommended/snapshotReasons 提示是否补充快照;openedTabs 返回可继续操作的 tabId 和 ready。navigation 模式的 ready 表示新页面就绪。", "显式开启的诊断通道在 diagnostics 中返回动作期间增量,与 observe 独立。"];
915
920
  readonly notes: readonly ["直接写入 input[type=file],不依赖 file chooser;隐藏的文件节点也可上传。外部 Provider 的文件中转能力查询 mearl <providerId>。"];
916
921
  readonly examples: ["page_upload --payload '{\"tabId\":12345,\"selector\":\"#file-input\",\"filePaths\":[\"/Users/me/photo.jpg\"]}'"];
917
922
  }, {
@@ -1055,7 +1060,7 @@ export declare const COMMANDS: readonly [{
1055
1060
  readonly examples: ["set_device_emulation --payload '{\"tabId\":12345,\"enabled\":true,\"preset\":\"iphone-17-pro\"}'", "set_device_emulation --payload '{\"tabId\":12345,\"enabled\":true,\"preset\":\"pixel-11\",\"orientation\":\"landscape\"}'", "set_device_emulation --payload '{\"tabId\":12345,\"enabled\":true,\"preset\":\"ipad-mini-a17-pro\",\"orientation\":\"landscape\",\"deviceShell\":true,\"splitScreen\":true}'", "set_device_emulation --payload '{\"tabId\":12345,\"enabled\":false}'"];
1056
1061
  }, {
1057
1062
  readonly name: "set_app_profile";
1058
- readonly description: "设置已安装的 App 档案;完整 JSBridge 由能力包提供。可同时设置 MTop 页面接口环境,传 emulation 时联动设备模拟";
1063
+ readonly description: "设置已安装的 App 档案;完整 JSBridge 由能力包提供。可同时设置已安装的网络控件,传 emulation 时联动设备模拟";
1059
1064
  readonly summary: "设置或清除目标标签页的 App 容器模拟";
1060
1065
  readonly params: [{
1061
1066
  readonly name: "enabled";
@@ -1065,7 +1070,7 @@ export declare const COMMANDS: readonly [{
1065
1070
  }, {
1066
1071
  readonly name: "profile";
1067
1072
  readonly type: "string";
1068
- readonly description: `\u5BB9\u5668\u6863\u6848\u540D\uFF08enabled=true \u65F6\u5FC5\u586B\uFF09\uFF1B\u5185\u7F6E ${string}`;
1073
+ readonly description: "已安装的容器档案 ID(enabled=true 时必填);当前动态帮助直接展示目标浏览器目录";
1069
1074
  }, {
1070
1075
  readonly name: "os";
1071
1076
  readonly type: "\"ios\" | \"android\"";
@@ -1091,9 +1096,9 @@ export declare const COMMANDS: readonly [{
1091
1096
  readonly type: "object";
1092
1097
  readonly description: "声明式覆盖桥方法,形如 {methods:{api:{behavior|response|noop,silent?}}};不执行配置脚本";
1093
1098
  }, {
1094
- readonly name: "mtopEnv";
1095
- readonly type: "\"default\" | \"prod\" | \"pre\"";
1096
- readonly description: "可选 MTop 页面接口环境;default 关闭环境改写,省略时保持当前设置。仅作用于目标 tab";
1099
+ readonly name: "networkControl";
1100
+ readonly type: "object | null";
1101
+ readonly description: "可选已安装网络控件 {id,value};null 清除,省略时保持当前设置。仅作用于目标 tab";
1097
1102
  }, {
1098
1103
  readonly name: "emulation";
1099
1104
  readonly type: "object";
@@ -1109,8 +1114,8 @@ export declare const COMMANDS: readonly [{
1109
1114
  readonly description: "目标标签页 ID";
1110
1115
  }];
1111
1116
  readonly notes: readonly ["只有用户明确要求 App/客户端/容器/JSBridge 模拟时启用。移动视口或普通 H5 调试使用 set_device_emulation。", "emulation={} 使用档案推荐设备;enabled=false 时省略 emulation 只清除 App 注入,传 {} 同时清除设备模拟。", "bridgeConfig.methods 按方法声明 behavior / response / noop 三选一,可传 silent;只支持受控行为、固定 JSON 回包或成功空实现,不执行配置脚本。"];
1112
- readonly result: readonly ["返回 enabled、profile、label、userAgent、os、mtopEnv、reloaded;联动设备时额外返回实际 emulation。"];
1113
- readonly examples: ["set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"fliggy\"}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"fliggy\",\"mtopEnv\":\"pre\"}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":false,\"mtopEnv\":\"prod\"}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"fliggy\",\"emulation\":{}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"alipay\",\"emulation\":{\"preset\":\"pixel-11\",\"deviceShell\":true}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"fliggy\",\"emulation\":{\"preset\":\"ipad-mini-a17-pro\",\"orientation\":\"landscape\",\"deviceShell\":true,\"splitScreen\":true}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":false}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":false,\"emulation\":{}}'"];
1117
+ readonly result: readonly ["返回 enabled、profile、label、userAgent、os、networkControl、reloaded;联动设备时额外返回实际 emulation。"];
1118
+ readonly examples: ["set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"reader\"}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"reader\",\"networkControl\":{\"id\":\"environment\",\"value\":\"pre\"}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":false,\"networkControl\":null}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"reader\",\"emulation\":{}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"wallet\",\"emulation\":{\"preset\":\"pixel-11\",\"deviceShell\":true}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":true,\"profile\":\"reader\",\"emulation\":{\"preset\":\"ipad-mini-a17-pro\",\"orientation\":\"landscape\",\"deviceShell\":true,\"splitScreen\":true}}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":false}'", "set_app_profile --payload '{\"tabId\":12345,\"enabled\":false,\"emulation\":{}}'"];
1114
1119
  }, {
1115
1120
  readonly name: "set_timezone";
1116
1121
  readonly description: "覆盖目标 tab 的时区,传空字符串恢复浏览器默认时区";
@@ -1153,7 +1158,7 @@ export declare const COMMANDS: readonly [{
1153
1158
  }];
1154
1159
  readonly notes: readonly ["只读取指定非分区 Cookie,不列举全部、不回退分区 Cookie,拒绝 HttpOnly;禁止读取认证 Token。指定 url 不导航,指定 tabId 仅选择存储区时不启动采集。"];
1155
1160
  readonly result: readonly ["找到时 found=true 并返回 value/domain/path;不存在时 found=false。"];
1156
- readonly examples: ["get_cookie --payload '{\"tabId\":12345,\"name\":\"feature_flag\"}'", "get_cookie --payload '{\"url\":\"https://www.taobao.com/\",\"name\":\"tracknick\"}'", "get_cookie --payload '{\"tabId\":12345,\"name\":\"feature_channel\",\"domain\":\"example.com\"}'", "get_cookie --payload '{\"tabId\":12345,\"name\":\"tracknick\",\"url\":\"https://www.taobao.com/\",\"domain\":\"example.com\",\"path\":\"/\"}'"];
1161
+ readonly examples: ["get_cookie --payload '{\"tabId\":12345,\"name\":\"feature_flag\"}'", "get_cookie --payload '{\"url\":\"https://www.shop.com/\",\"name\":\"account_name\"}'", "get_cookie --payload '{\"tabId\":12345,\"name\":\"feature_channel\",\"domain\":\"example.com\"}'", "get_cookie --payload '{\"tabId\":12345,\"name\":\"account_name\",\"url\":\"https://www.shop.com/\",\"domain\":\"example.com\",\"path\":\"/\"}'"];
1157
1162
  }, {
1158
1163
  readonly name: "set_cookie";
1159
1164
  readonly description: "在目标浏览器设置一个指定非分区 session Cookie,可选刷新指定页面";
@@ -1190,7 +1195,7 @@ export declare const COMMANDS: readonly [{
1190
1195
  }];
1191
1196
  readonly notes: readonly ["仅写非分区 session Cookie,不支持删除。reload=true 时校验目标域与刷新页域的授权。"];
1192
1197
  readonly result: readonly ["返回 url/name/domain/path/reloaded,指定标签页时包含 tabId;不回显 Cookie 值。"];
1193
- readonly examples: ["set_cookie --payload '{\"tabId\":12345,\"name\":\"feature_flag\",\"value\":\"enabled\"}'", "set_cookie --payload '{\"url\":\"https://www.taobao.com/\",\"name\":\"feature_flag\",\"value\":\"enabled\"}'", "set_cookie --payload '{\"tabId\":12345,\"name\":\"feature_channel\",\"value\":\"3.6.63\",\"domain\":\"example.com\",\"reload\":true}'"];
1198
+ readonly examples: ["set_cookie --payload '{\"tabId\":12345,\"name\":\"feature_flag\",\"value\":\"enabled\"}'", "set_cookie --payload '{\"url\":\"https://www.shop.com/\",\"name\":\"feature_flag\",\"value\":\"enabled\"}'", "set_cookie --payload '{\"tabId\":12345,\"name\":\"feature_channel\",\"value\":\"3.6.63\",\"domain\":\"example.com\",\"reload\":true}'"];
1194
1199
  }, {
1195
1200
  readonly name: "page_frames";
1196
1201
  readonly description: "获取页面主 frame 与所有 iframe 列表";
@@ -1203,7 +1208,7 @@ export declare const COMMANDS: readonly [{
1203
1208
  readonly result: readonly ["frames[] 包含 frameId、url、name 和 isMainFrame;frameId 可用于 page_eval 等支持 frame 定位的 action。"];
1204
1209
  readonly examples: ["page_frames --payload '{\"tabId\":12345}'"];
1205
1210
  }, {
1206
- readonly name: "request_domain_permission";
1211
+ readonly name: "request_permission";
1207
1212
  readonly description: "申请访问指定域名的权限(必要时弹窗让用户授权)";
1208
1213
  readonly params: [{
1209
1214
  readonly name: "domain";
@@ -1213,7 +1218,7 @@ export declare const COMMANDS: readonly [{
1213
1218
  }];
1214
1219
  readonly notes: readonly ["domain 使用纯主机名,不传 URL。在 send_request 或 set_rule 提示缺少浏览器域名权限时申请。", "弹窗等待用户选择,90 秒超时或关闭按拒绝处理;granted=true 后才重试原请求。"];
1215
1220
  readonly result: readonly ["返回 granted、domain,授权成功时包含 origin。"];
1216
- readonly examples: ["request_domain_permission --payload '{\"domain\":\"example.com\"}'"];
1221
+ readonly examples: ["request_permission --payload '{\"domain\":\"example.com\"}'"];
1217
1222
  }, {
1218
1223
  readonly name: "run_actions";
1219
1224
  readonly description: "批量顺序执行多个 action,减少往返延迟。遇错即停,返回已完成步骤结果;步骤内的页面动作不带内置观察";