@mearl/mcp-server 2.1.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/index.js +101 -15
- package/package.json +3 -3
- package/dist/types.d.ts +0 -120
- package/dist/types.js +0 -2
package/README.md
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
- 📝 **browser_get_logs**: 获取控制台日志
|
|
10
10
|
- 🎭 **browser_set_mock**: 动态设置 Mock 数据
|
|
11
11
|
- 🌐 **browser_list**: 统一列出普通浏览器和托管浏览器,返回默认目标、类型及连接状态
|
|
12
|
-
- 📴 **browser_release**:
|
|
12
|
+
- 📴 **browser_release**: 按用户明确要求释放 debugger/CDP 控制和会话级临时效果,并保留浏览器与全部标签页
|
|
13
13
|
- 🚀 **browser_launch / browser_close**: 启动或关闭独立 Profile 的托管 Chrome
|
|
14
14
|
- 🌐 **browser_page_snapshot**: 首次获取页面结构和可交互元素
|
|
15
|
-
- ⚡ **browser_page_click/type/hover/scroll/press/upload**:
|
|
15
|
+
- ⚡ **browser_page_click/type/hover/scroll/press/upload**: 执行页面动作,默认内置观察,返回通知、可交互控件、焦点、导航或直接打开的新标签页
|
|
16
16
|
|
|
17
17
|
## 浏览器交互工作流
|
|
18
18
|
|
|
19
|
-
首次进入页面时调用 `browser_page_snapshot` 建立结构基线。后续点击、输入、悬停、滚动、按键和上传直接调用 `browser_page_click/type/hover/scroll/press/upload`,它们默认内置观察,动作与异步同步在一次调用内完成;同页结果读取 `effects.notifications`、`effects.interactives` 和 `effects.focus`。新增或变化的可交互节点会尽量携带可直接用于后续动作的 `node.ref`,解析不到 ref 时回退使用 `node.selector`。导航结果读取新 URL
|
|
19
|
+
首次进入页面时调用 `browser_page_snapshot` 建立结构基线。后续点击、输入、悬停、滚动、按键和上传直接调用 `browser_page_click/type/hover/scroll/press/upload`,它们默认内置观察,动作与异步同步在一次调用内完成;同页结果读取 `effects.notifications`、`effects.interactives` 和 `effects.focus`。新增或变化的可交互节点会尽量携带可直接用于后续动作的 `node.ref`,解析不到 ref 时回退使用 `node.selector`。导航结果读取新 URL 和就绪状态;动作直接打开新标签页时,`openedTabs` 返回可继续操作的 `tabId`,无需调用 `browser_tab_list`。通常仅在导航后、`fullSnapshotRecommended: true` 或需要视觉判断时重新 snapshot 或截图;滚动后若下一步需要读取新视口内容,可按需获取 viewport 快照。`browser_page_eval` 默认裸执行,仅在表达式会修改页面且需要变化信号时显式传 `observe` 对象。
|
|
20
20
|
|
|
21
21
|
长列表重新感知时优先使用 `browser_page_snapshot(mode: "viewport")`;已知 CSS 区域时使用 `rootSelector`,已有 ref 时使用 `rootRef`,只查找特定文案或角色时使用 `query`;仅需要当前视口内的控件时使用 `mode: "interactive"`,避免整页 AX Tree 占用上下文。视口内缺少 AX 控件语义时,`interactive` 会自动回退到 viewport,并返回 `fallbackMode: "viewport"`。重复文本点击可用 `scope` 限定子树,滚动子节点所在容器可用 `containerPolicy: "nearest"`。
|
|
22
22
|
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,47 @@ import { createRequire } from 'module';
|
|
|
26
26
|
import { RESPONSE_SIZE_SMALL, RESPONSE_SIZE_MEDIUM, RESPONSE_SIZE_LARGE, RESPONSE_SIZE_MAX, } from './constants.js';
|
|
27
27
|
const require = createRequire(import.meta.url);
|
|
28
28
|
const MCP_SERVER_VERSION = require('../package.json').version;
|
|
29
|
+
const MCP_TOOL_ACTIONS = {
|
|
30
|
+
browser_get_requests: 'get_requests',
|
|
31
|
+
browser_get_events: 'get_events',
|
|
32
|
+
browser_get_logs: 'get_logs',
|
|
33
|
+
browser_set_mock: 'set_mock',
|
|
34
|
+
browser_get_mocks: 'get_mocks',
|
|
35
|
+
browser_get_api_schema: 'get_api_schema',
|
|
36
|
+
browser_send_request: 'send_request',
|
|
37
|
+
browser_send_mtop_request: 'send_mtop_request',
|
|
38
|
+
browser_set_rule: 'set_rule',
|
|
39
|
+
browser_get_rules: 'get_rules',
|
|
40
|
+
browser_page_screenshot: 'page_screenshot',
|
|
41
|
+
browser_page_selected_element: 'page_selected_element',
|
|
42
|
+
get_user_info: 'get_user_info',
|
|
43
|
+
tdbank_account: 'tdbank_account',
|
|
44
|
+
browser_launch: 'browser_launch',
|
|
45
|
+
browser_close: 'browser_close',
|
|
46
|
+
browser_release: 'browser_release',
|
|
47
|
+
browser_tab_open: 'tab_open',
|
|
48
|
+
browser_tab_close: 'tab_close',
|
|
49
|
+
browser_tab_list: 'tab_list',
|
|
50
|
+
browser_page_click: 'page_click',
|
|
51
|
+
browser_page_type: 'page_type',
|
|
52
|
+
browser_page_scroll: 'page_scroll',
|
|
53
|
+
browser_page_hover: 'page_hover',
|
|
54
|
+
browser_page_eval: 'page_eval',
|
|
55
|
+
browser_page_snapshot: 'page_snapshot',
|
|
56
|
+
browser_page_press: 'page_press',
|
|
57
|
+
browser_page_wait: 'page_wait',
|
|
58
|
+
browser_page_navigate: 'page_navigate',
|
|
59
|
+
browser_page_upload: 'page_upload',
|
|
60
|
+
browser_page_frames: 'page_frames',
|
|
61
|
+
browser_set_device_emulation: 'set_device_emulation',
|
|
62
|
+
browser_set_timezone: 'set_timezone',
|
|
63
|
+
browser_run_actions: 'run_actions',
|
|
64
|
+
browser_list: 'browser_list',
|
|
65
|
+
browser_select_browser: 'browser_select_browser',
|
|
66
|
+
};
|
|
67
|
+
function defineMcpTools(tools) {
|
|
68
|
+
return tools;
|
|
69
|
+
}
|
|
29
70
|
// 日志输出到 stderr(不影响 stdio 通信)
|
|
30
71
|
const LOG_FILE = join(tmpdir(), 'mearl-mcp-server.log');
|
|
31
72
|
const log = (...args) => {
|
|
@@ -322,7 +363,7 @@ async function main() {
|
|
|
322
363
|
capabilities: {
|
|
323
364
|
tools: {},
|
|
324
365
|
},
|
|
325
|
-
instructions: '浏览器交互默认工作流:首次进入页面时使用 browser_page_snapshot 建立页面基线;后续点击、输入、悬停、滚动、按键和上传直接使用 browser_page_click/type/hover/scroll/press/upload,它们默认内置观察,动作与异步稳定判断在一次调用内完成,返回 { action, observation };传 observe:false 可关闭观察仅执行裸动作。观察结果不替代完整页面理解:observation.mode 为 delta 时确认 scope="main-document",再读取 effects.notifications、effects.interactives 和 effects.focus;interactives/focus 节点有 ref 时优先直接用于后续动作,没有 ref 时使用 selector;notifications 中 change=transient 表示已经消失的 Toast、状态或错误提示。为 navigation 时先检查 ready,ready=true 表示文档、相关业务请求和可见骨架状态已经稳定,可在新页面重建 snapshot。其他情况下通常仅当 fullSnapshotRecommended 为 true 时根据 snapshotReasons 回退,并选择最小范围:已有区域 ref 用 rootRef,已有 CSS 根节点用 rootSelector,只需查找特定目标时加 query,长列表用 mode="viewport",只需当前视口内的控件用 mode="interactive";滚动动作的 moved 只证明位置变化,下一步需要读取新视口内容时可按需获取 viewport 快照。视口内缺少 AX 控件语义时 interactive 会在同一次调用中回退到 viewport,并返回 fallbackMode。重复文本点击用 scope 限定区域,ref 指向滚动容器子节点时用 containerPolicy="nearest"。page_eval 默认裸执行且应作为结构化能力无法表达时的补充,仅在表达式修改页面并需要变化信号时显式传 observe 对象。视觉任务再使用 screenshot。不要在每次动作后固定调用 browser_page_wait、snapshot 或 screenshot。',
|
|
366
|
+
instructions: '浏览器交互默认工作流:首次进入页面时使用 browser_page_snapshot 建立页面基线;后续点击、输入、悬停、滚动、按键和上传直接使用 browser_page_click/type/hover/scroll/press/upload,它们默认内置观察,动作与异步稳定判断在一次调用内完成,返回 { action, observation };传 observe:false 可关闭观察仅执行裸动作。观察结果不替代完整页面理解:observation.mode 为 delta 时确认 scope="main-document",再读取 effects.notifications、effects.interactives 和 effects.focus;interactives/focus 节点有 ref 时优先直接用于后续动作,没有 ref 时使用 selector;notifications 中 change=transient 表示已经消失的 Toast、状态或错误提示。为 navigation 时先检查 ready,ready=true 表示文档、相关业务请求和可见骨架状态已经稳定,可在新页面重建 snapshot。observation.openedTabs 表示动作直接打开的关联标签页,可显式使用返回的 tabId 继续操作,无需调用 browser_tab_list。其他情况下通常仅当 fullSnapshotRecommended 为 true 时根据 snapshotReasons 回退,并选择最小范围:已有区域 ref 用 rootRef,已有 CSS 根节点用 rootSelector,只需查找特定目标时加 query,长列表用 mode="viewport",只需当前视口内的控件用 mode="interactive";滚动动作的 moved 只证明位置变化,下一步需要读取新视口内容时可按需获取 viewport 快照。视口内缺少 AX 控件语义时 interactive 会在同一次调用中回退到 viewport,并返回 fallbackMode。重复文本点击用 scope 限定区域,ref 指向滚动容器子节点时用 containerPolicy="nearest"。page_eval 默认裸执行且应作为结构化能力无法表达时的补充,仅在表达式修改页面并需要变化信号时显式传 observe 对象。视觉任务再使用 screenshot。不要在每次动作后固定调用 browser_page_wait、snapshot 或 screenshot。',
|
|
326
367
|
});
|
|
327
368
|
// 页面交互工具共享的 observe 参数 schema:默认开启内置观察,传 false 关闭
|
|
328
369
|
const OBSERVE_INPUT_SCHEMA = {
|
|
@@ -360,7 +401,7 @@ async function main() {
|
|
|
360
401
|
},
|
|
361
402
|
};
|
|
362
403
|
// 定义工具列表
|
|
363
|
-
const tools = [
|
|
404
|
+
const tools = defineMcpTools([
|
|
364
405
|
{
|
|
365
406
|
name: 'browser_get_requests',
|
|
366
407
|
description: '获取浏览器中最近的 API 请求历史记录,包含完整的请求和响应信息。适用于分析性能、排查问题、查看数据流等场景。无需等待用户操作,立即返回已有数据。',
|
|
@@ -568,7 +609,7 @@ async function main() {
|
|
|
568
609
|
},
|
|
569
610
|
{
|
|
570
611
|
name: 'browser_send_request',
|
|
571
|
-
description: '通过浏览器发起 HTTP 代理请求,自动携带目标域名的 Cookie(使用当前浏览器登录态)。支持 GET/POST/PUT/DELETE/PATCH
|
|
612
|
+
description: '通过浏览器发起 HTTP 代理请求,自动携带目标域名的 Cookie(使用当前浏览器登录态)。支持 GET/POST/PUT/DELETE/PATCH、multipart 文本字段和本地文件上传,适用于需要用户登录态的接口调试、数据爬取、接口测试等场景。',
|
|
572
613
|
inputSchema: {
|
|
573
614
|
type: 'object',
|
|
574
615
|
properties: {
|
|
@@ -595,15 +636,50 @@ async function main() {
|
|
|
595
636
|
body: {
|
|
596
637
|
description: '请求体。传入对象时自动序列化为 JSON 并设置 Content-Type: application/json;传入字符串时原样发送',
|
|
597
638
|
},
|
|
639
|
+
formData: {
|
|
640
|
+
type: 'object',
|
|
641
|
+
description: 'multipart/form-data 文本字段。字段值支持 string、number、boolean;不能与 body 同时使用',
|
|
642
|
+
additionalProperties: {
|
|
643
|
+
anyOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
files: {
|
|
647
|
+
type: 'array',
|
|
648
|
+
description: 'multipart 文件列表,最多 20 个且总计不超过 40 MiB。本地调用优先传绝对 filePath;远程调用可传 base64,并同时提供 filename,Base64 文件内容总计不超过 7 MiB',
|
|
649
|
+
maxItems: 20,
|
|
650
|
+
items: {
|
|
651
|
+
type: 'object',
|
|
652
|
+
properties: {
|
|
653
|
+
fieldName: {
|
|
654
|
+
type: 'string',
|
|
655
|
+
description: 'multipart 字段名,例如 file',
|
|
656
|
+
},
|
|
657
|
+
filePath: {
|
|
658
|
+
type: 'string',
|
|
659
|
+
description: 'Mearl native-host 所在机器上的绝对文件路径',
|
|
660
|
+
},
|
|
661
|
+
base64: {
|
|
662
|
+
type: 'string',
|
|
663
|
+
description: '文件内容的 Base64;与 filePath 二选一',
|
|
664
|
+
},
|
|
665
|
+
filename: {
|
|
666
|
+
type: 'string',
|
|
667
|
+
description: '上传文件名;使用 base64 时必填',
|
|
668
|
+
},
|
|
669
|
+
contentType: {
|
|
670
|
+
type: 'string',
|
|
671
|
+
description: '文件 MIME 类型;默认根据文件名推断',
|
|
672
|
+
},
|
|
673
|
+
},
|
|
674
|
+
required: ['fieldName'],
|
|
675
|
+
oneOf: [{ required: ['filePath'] }, { required: ['base64', 'filename'] }],
|
|
676
|
+
},
|
|
677
|
+
},
|
|
598
678
|
withCookies: {
|
|
599
679
|
type: 'boolean',
|
|
600
680
|
description: '是否自动携带浏览器中该域名的 Cookie,默认 true',
|
|
601
681
|
default: true,
|
|
602
682
|
},
|
|
603
|
-
cookieDomain: {
|
|
604
|
-
type: 'string',
|
|
605
|
-
description: '指定获取 Cookie 的域名(默认从 url 中自动提取域名)',
|
|
606
|
-
},
|
|
607
683
|
responseType: {
|
|
608
684
|
type: 'string',
|
|
609
685
|
enum: ['json', 'text', 'auto'],
|
|
@@ -978,7 +1054,7 @@ async function main() {
|
|
|
978
1054
|
},
|
|
979
1055
|
{
|
|
980
1056
|
name: 'browser_release',
|
|
981
|
-
description: '
|
|
1057
|
+
description: '仅当用户明确要求结束调试、退出接管或清理会话资源时,释放当前目标浏览器的 debugger/CDP 控制;不要作为普通任务收尾。它会停止持续采集,并立即清除设备/时区模拟、会话级 Mock 和录制,但保留浏览器与全部标签页。后续浏览器操作仍可自动重新建立控制。',
|
|
982
1058
|
inputSchema: {
|
|
983
1059
|
type: 'object',
|
|
984
1060
|
properties: {},
|
|
@@ -999,6 +1075,10 @@ async function main() {
|
|
|
999
1075
|
description: '是否激活(前台显示)新标签页。默认 false(后台打开)',
|
|
1000
1076
|
default: false,
|
|
1001
1077
|
},
|
|
1078
|
+
openerTabId: {
|
|
1079
|
+
type: 'number',
|
|
1080
|
+
description: '来源标签页 ID。侧边栏对话继续任务时传入,用于把新开或复用的标签页关联到同一对话',
|
|
1081
|
+
},
|
|
1002
1082
|
closeExisting: {
|
|
1003
1083
|
type: 'boolean',
|
|
1004
1084
|
description: '打开前是否先关闭 Agent 受控的已有标签页。默认 false',
|
|
@@ -1101,7 +1181,7 @@ async function main() {
|
|
|
1101
1181
|
},
|
|
1102
1182
|
{
|
|
1103
1183
|
name: 'browser_page_click',
|
|
1104
|
-
description: '点击页面元素,默认内置观察:同一次调用内等待相关 DOM、XHR/Fetch/MTop 请求或导航稳定,返回 { action, observation }
|
|
1184
|
+
description: '点击页面元素,默认内置观察:同一次调用内等待相关 DOM、XHR/Fetch/MTop 请求或导航稳定,返回 { action, observation };点击直接打开新标签页时 observation.openedTabs 返回可继续操作的 tabId、URL、标题和加载状态。传 observe:false 仅执行裸点击。定位方式三选一:selector(CSS 或 @eN snapshot ref)、text(按可见文本匹配 accessibility name,可用 scope 限定子树)、point(视口坐标)。clickMode 默认 auto:可见页按设备模拟状态使用可信 mouse/touch,隐藏页不切换标签或还原窗口并自动使用 DOM fallback;checkbox/radio 使用带状态校验的 DOM 路径。可用 dom/mouse/touch 强制派发方式。响应返回实际 dispatchMode,可信输入还返回 pointerType。',
|
|
1105
1185
|
inputSchema: {
|
|
1106
1186
|
type: 'object',
|
|
1107
1187
|
properties: {
|
|
@@ -1455,7 +1535,7 @@ async function main() {
|
|
|
1455
1535
|
},
|
|
1456
1536
|
{
|
|
1457
1537
|
name: 'browser_set_device_emulation',
|
|
1458
|
-
description: '把目标标签页切换为移动端模拟态:视口尺寸 / DPR / UA / 触摸事件全部按指定设备生效,等价于 Chrome DevTools 设备工具栏,作用域仅限该 tab
|
|
1538
|
+
description: '把目标标签页切换为移动端模拟态:视口尺寸 / DPR / UA / 触摸事件全部按指定设备生效,等价于 Chrome DevTools 设备工具栏,作用域仅限该 tab,释放 debugger/CDP 控制会自动还原。适用于:调试 H5 移动页面、让 page_click 在 swiper/fastclick 等只听 touchstart 的页面生效、让服务端按移动 UA 返回数据。启用后默认 reload 一次让页面以移动模式重新初始化;成功响应中的实际配置可直接验证设置结果,无需固定追加快照。enabled=false 清除模拟。',
|
|
1459
1539
|
inputSchema: {
|
|
1460
1540
|
type: 'object',
|
|
1461
1541
|
properties: {
|
|
@@ -1569,7 +1649,7 @@ async function main() {
|
|
|
1569
1649
|
required: ['browser'],
|
|
1570
1650
|
},
|
|
1571
1651
|
},
|
|
1572
|
-
];
|
|
1652
|
+
]);
|
|
1573
1653
|
// 处理工具列表请求
|
|
1574
1654
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
1575
1655
|
return { tools };
|
|
@@ -1578,8 +1658,11 @@ async function main() {
|
|
|
1578
1658
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
1579
1659
|
const { name, arguments: args } = request.params;
|
|
1580
1660
|
try {
|
|
1661
|
+
if (!(name in MCP_TOOL_ACTIONS))
|
|
1662
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
1663
|
+
const toolName = name;
|
|
1581
1664
|
let result;
|
|
1582
|
-
switch (
|
|
1665
|
+
switch (toolName) {
|
|
1583
1666
|
case 'browser_get_requests': {
|
|
1584
1667
|
const { tabId, count = 10, filter, since, includeBody = true, includeHeaders = false, maxBodySize = 50000, fields, keysOnly = false, source, } = args;
|
|
1585
1668
|
result = await client.getRequests({
|
|
@@ -1751,10 +1834,11 @@ async function main() {
|
|
|
1751
1834
|
break;
|
|
1752
1835
|
}
|
|
1753
1836
|
case 'browser_tab_open': {
|
|
1754
|
-
const { url, active = false, closeExisting = false, reuse = 'never', match, restoreFocusOnClose = false, emulation, group, } = args;
|
|
1837
|
+
const { url, active = false, openerTabId, closeExisting = false, reuse = 'never', match, restoreFocusOnClose = false, emulation, group, } = args;
|
|
1755
1838
|
result = await client.tabOpen({
|
|
1756
1839
|
url,
|
|
1757
1840
|
active,
|
|
1841
|
+
openerTabId,
|
|
1758
1842
|
closeExisting,
|
|
1759
1843
|
reuse,
|
|
1760
1844
|
match,
|
|
@@ -1906,8 +1990,10 @@ async function main() {
|
|
|
1906
1990
|
result = await client.selectBrowser(args);
|
|
1907
1991
|
break;
|
|
1908
1992
|
}
|
|
1909
|
-
default:
|
|
1910
|
-
|
|
1993
|
+
default: {
|
|
1994
|
+
const unhandledTool = toolName;
|
|
1995
|
+
throw new Error(`Unknown tool: ${unhandledTool}`);
|
|
1996
|
+
}
|
|
1911
1997
|
}
|
|
1912
1998
|
// 使用智能格式化返回结果
|
|
1913
1999
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mearl/mcp-server",
|
|
3
|
-
"version": "2.1
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "MCP Server for Mearl - enables AI to interact with Chrome browser requests and logs",
|
|
5
5
|
"mcpName": "io.github.F-loat/mearl",
|
|
6
6
|
"type": "module",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
32
32
|
"prompts": "^2.4.2",
|
|
33
|
-
"@mearl/client": "2.1
|
|
34
|
-
"@mearl/native-host": "2.1
|
|
33
|
+
"@mearl/client": "2.2.1",
|
|
34
|
+
"@mearl/native-host": "2.2.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^24.9.1",
|
package/dist/types.d.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
export interface MtopRequest {
|
|
2
|
-
id: number;
|
|
3
|
-
timestamp: string;
|
|
4
|
-
timestampMs: number;
|
|
5
|
-
method: string;
|
|
6
|
-
url: string;
|
|
7
|
-
apiName: string;
|
|
8
|
-
status: number;
|
|
9
|
-
statusText: string;
|
|
10
|
-
headers: Array<{
|
|
11
|
-
name: string;
|
|
12
|
-
value: string;
|
|
13
|
-
}>;
|
|
14
|
-
responseHeaders: Array<{
|
|
15
|
-
name: string;
|
|
16
|
-
value: string;
|
|
17
|
-
}>;
|
|
18
|
-
queryString: Record<string, string>;
|
|
19
|
-
postData: Record<string, any> | null;
|
|
20
|
-
responseBody: any;
|
|
21
|
-
duration?: number;
|
|
22
|
-
proxyData?: any;
|
|
23
|
-
}
|
|
24
|
-
export interface ConsoleLog {
|
|
25
|
-
level: 'log' | 'warn' | 'error' | 'info';
|
|
26
|
-
message: string;
|
|
27
|
-
timestamp: number;
|
|
28
|
-
/** 来源文件和行号,格式 "filename.js:42",仅在可获取时存在 */
|
|
29
|
-
source?: string;
|
|
30
|
-
args: any[];
|
|
31
|
-
}
|
|
32
|
-
export interface WaitForRequestParams {
|
|
33
|
-
pattern: string;
|
|
34
|
-
timeout?: number;
|
|
35
|
-
includeExisting?: boolean;
|
|
36
|
-
}
|
|
37
|
-
export interface GetRequestsParams {
|
|
38
|
-
count?: number;
|
|
39
|
-
filter?: string;
|
|
40
|
-
since?: number;
|
|
41
|
-
}
|
|
42
|
-
export interface GetLogsParams {
|
|
43
|
-
level?: 'log' | 'warn' | 'error' | 'info' | 'all';
|
|
44
|
-
since?: number;
|
|
45
|
-
limit?: number;
|
|
46
|
-
filter?: string;
|
|
47
|
-
}
|
|
48
|
-
export interface SetMockParams {
|
|
49
|
-
apiName: string;
|
|
50
|
-
mockData: any;
|
|
51
|
-
enabled?: boolean;
|
|
52
|
-
duration?: number;
|
|
53
|
-
conditions?: Record<string, any>;
|
|
54
|
-
}
|
|
55
|
-
export interface GetApiSchemaParams {
|
|
56
|
-
api: string;
|
|
57
|
-
version?: string;
|
|
58
|
-
}
|
|
59
|
-
export interface GetSelectedElementParams {
|
|
60
|
-
includeOuterHTML?: boolean;
|
|
61
|
-
includeScreenshot?: boolean;
|
|
62
|
-
}
|
|
63
|
-
export interface RequestsResponse {
|
|
64
|
-
meta: {
|
|
65
|
-
/** 实际返回的请求数量 */
|
|
66
|
-
count: number;
|
|
67
|
-
/** 缓冲区中符合过滤条件的总请求数 */
|
|
68
|
-
totalMatched: number;
|
|
69
|
-
/** 缓冲区中的总请求数(未过滤) */
|
|
70
|
-
totalInBuffer: number;
|
|
71
|
-
/** 应用的过滤器(如果有) */
|
|
72
|
-
filter?: string;
|
|
73
|
-
/** 时间过滤器(秒) */
|
|
74
|
-
since?: number;
|
|
75
|
-
/** 是否包含请求/响应体 */
|
|
76
|
-
includeBody: boolean;
|
|
77
|
-
/** 是否包含请求/响应头 */
|
|
78
|
-
includeHeaders: boolean;
|
|
79
|
-
/** 提取的字段(如果有) */
|
|
80
|
-
fields?: string[];
|
|
81
|
-
/** 是否只返回键结构 */
|
|
82
|
-
keysOnly: boolean;
|
|
83
|
-
};
|
|
84
|
-
/** 请求数据列表 */
|
|
85
|
-
requests: MtopRequest[];
|
|
86
|
-
}
|
|
87
|
-
export interface LogsResponse {
|
|
88
|
-
meta: {
|
|
89
|
-
/** 实际返回的日志数量 */
|
|
90
|
-
count: number;
|
|
91
|
-
/** 符合过滤条件的总日志数 */
|
|
92
|
-
totalMatched: number;
|
|
93
|
-
/** 应用的日志级别过滤 */
|
|
94
|
-
level: string;
|
|
95
|
-
/** 时间过滤器(秒) */
|
|
96
|
-
since?: number;
|
|
97
|
-
/** 应用的过滤模式 */
|
|
98
|
-
filter?: string;
|
|
99
|
-
};
|
|
100
|
-
/** 日志数据列表 */
|
|
101
|
-
logs: ConsoleLog[];
|
|
102
|
-
}
|
|
103
|
-
export interface ScreenshotResponse {
|
|
104
|
-
meta: {
|
|
105
|
-
/** 截图格式 */
|
|
106
|
-
format: 'png' | 'jpeg';
|
|
107
|
-
/** 截图宽度 */
|
|
108
|
-
width: number;
|
|
109
|
-
/** 截图高度 */
|
|
110
|
-
height: number;
|
|
111
|
-
/** 截图数据大小(字节) */
|
|
112
|
-
size: number;
|
|
113
|
-
/** 截图的页面 URL */
|
|
114
|
-
url: string;
|
|
115
|
-
/** 截图的页面标题 */
|
|
116
|
-
title: string;
|
|
117
|
-
};
|
|
118
|
-
/** Base64 编码的截图数据 */
|
|
119
|
-
data: string;
|
|
120
|
-
}
|
package/dist/types.js
DELETED