@anweat/dsh-browser 0.1.12 → 0.1.14-alpha.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 +35 -13
- package/lib/approval-policy.js +1 -1
- package/lib/approval-policy.js.map +1 -1
- package/lib/automation-assets-rpc.js +47 -6
- package/lib/automation-assets-rpc.js.map +1 -1
- package/lib/browser-service.d.ts +86 -5
- package/lib/browser-service.js +269 -21
- package/lib/browser-service.js.map +1 -1
- package/lib/client/automation-assets-client.d.ts +1 -1
- package/lib/client/automation-assets-client.js +1 -1
- package/lib/client/automation-assets-client.js.map +1 -1
- package/lib/client/context-types.d.ts +1 -1
- package/lib/client/form.d.ts +2 -1
- package/lib/client/form.js.map +1 -1
- package/lib/client.js +1 -1
- package/lib/client.js.map +1 -1
- package/lib/freedom.d.ts +1 -1
- package/lib/freedom.js +9 -0
- package/lib/freedom.js.map +1 -1
- package/lib/tools.js +188 -28
- package/lib/tools.js.map +1 -1
- package/package.json +37 -23
- package/scripts/check-client-bundle.mjs +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
把 **Playwright / Patchright(可选 Chromium 驱动)** 与 **OpenCLI** 作为插件自身的 npm 依赖打包(优先插件本地,缺省回退全局复用),对外提供一个 `browser` 服务 + 一组交互式浏览器工具。`dsh-web-search-pro` 通过 `inject: ['browser']` 注入该服务,驱动它的浏览器 / OpenCLI 后端——**不再依赖全局 CLI**。
|
|
6
6
|
|
|
7
|
+
## 兼容与发布通道
|
|
8
|
+
|
|
9
|
+
| 插件发布通道 | DSH 基线 | 兼容承诺 |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| npm `latest`(`0.1.12`) | `dsh-v0.1.1-rc.2` 至 `dsh-v0.1.2-rc.1` | 已验证维护基线 |
|
|
12
|
+
| npm `next` 候选(`0.1.13-alpha.1`) | `dsh-v0.1.5-alpha.1` | 精确依赖与真实 profile 验收目标 |
|
|
13
|
+
|
|
14
|
+
`0.1.13-alpha.1` 使用 DSH 新客户端分包:状态存储来自
|
|
15
|
+
`dsh-client-store`,设置契约来自 `dsh-client-ui-settings`,客户端 Context
|
|
16
|
+
来自 Cordis。该候选不会覆盖 npm `latest`。
|
|
17
|
+
|
|
7
18
|
## 安装
|
|
8
19
|
|
|
9
20
|
```bash
|
|
@@ -14,17 +25,17 @@ dsh plugin --profile web add ./dsh-browser
|
|
|
14
25
|
dsh --profile web
|
|
15
26
|
```
|
|
16
27
|
|
|
17
|
-
>
|
|
28
|
+
> npm `latest` 延续现有维护基线;本开发分支精确适配 `dsh-v0.1.5-alpha.1`。
|
|
18
29
|
> 若你的 harness 是包含未发布提交的本地源码 checkout,版本号可能有出入——用
|
|
19
30
|
> `dsh plugin --profile web add ./<path>` 并在 profile 的 `pnpm-workspace.yaml`
|
|
20
31
|
> 里对齐版本后重装即可。
|
|
21
32
|
|
|
22
33
|
## 从旧版本升级
|
|
23
34
|
|
|
24
|
-
Web Search Pro 与浏览器插件应同步升级;`dsh-web-search-pro >= 0.1.8` 需要 `@anweat/dsh-browser >= 0.1.8
|
|
35
|
+
Web Search Pro 与浏览器插件应同步升级;`dsh-web-search-pro >= 0.1.8` 需要 `@anweat/dsh-browser >= 0.1.8`。面向 `dsh-v0.1.5-alpha.1` 联调时,使用 browser 与 Web Search Pro 的 npm `next` 候选并完整重启 profile。0.1.11 移除了对旧版 `dsh-settings` 的运行时 `settingsNamespace` 导入;0.1.10 修复工具描述被 DSH 误解析为 prompt 变量。
|
|
25
36
|
|
|
26
37
|
```bash
|
|
27
|
-
dsh plugin --profile web add @anweat/dsh-browser
|
|
38
|
+
dsh plugin --profile web add @anweat/dsh-browser@next dsh-web-search-pro@next
|
|
28
39
|
```
|
|
29
40
|
|
|
30
41
|
升级后完整停止并重启 Web profile,再调用 `browser_status`、`browser_opencli_status` 和 `web_backend_status`;仅刷新网页不会重新加载插件服务或 Web Search Pro 配置面板。尤其不要只升级 Web Search Pro:新的工具目录、Patchright 运行时和调用缓冲都来自浏览器插件。
|
|
@@ -32,15 +43,17 @@ dsh plugin --profile web add @anweat/dsh-browser@^0.1.11 dsh-web-search-pro@^0.1
|
|
|
32
43
|
## 快速使用与适用情形
|
|
33
44
|
|
|
34
45
|
安装并重启后,可先让模型调用 `browser_status`,再按任务选择工具。默认
|
|
35
|
-
`automationMode: standard
|
|
46
|
+
`automationMode: standard`:读取直接执行,点击、输入、按键、选择、勾选、悬停、文件上传及页面写操作走 DSH 原生一次性审批。页面脚本和本地文件上传在 `autonomous` 下仍需审批,只有 `unrestricted` 会跳过确认。
|
|
36
47
|
|
|
37
48
|
| 情形 | 推荐方式 | 关键边界 |
|
|
38
49
|
|---|---|---|
|
|
39
50
|
| 公开网页读取、截图 | `browser_open` → `browser_read` / `browser_screenshot` | 不需要登录态 |
|
|
40
|
-
| 表单、分页、懒加载 | `browser_click` / `browser_type` / `
|
|
51
|
+
| 表单、分页、懒加载 | `browser_click` / `browser_type` / `browser_press` / `browser_select` / `browser_check` / `browser_scroll` | CSS 或 role/text/label 语义定位;`standard` 下审批 |
|
|
52
|
+
| SPA 条件等待 | `browser_wait` | 支持 locator、URL glob、networkidle 或最多 10 秒固定等待 |
|
|
41
53
|
| 悬停菜单与提示 | `browser_hover` | 与直接页面交互使用相同审批策略 |
|
|
42
54
|
| 文件上传 | `browser_set_files` | 只接受现有绝对文件路径;最多 20 个、合计 512 MiB;除 `unrestricted` 外审批会显示路径 |
|
|
43
55
|
| 页面脚本表达式 | `browser_evaluate` | 使用当前页面来源和登录态;可访问 DOM、非 HttpOnly Cookie、Web Storage 和浏览器允许的网络 API |
|
|
56
|
+
| 页面故障排查 | `browser_open(capture=[console,network])` → `browser_console` / `browser_requests` | 只在内存保留最多 200 条;网络仅记录失败及 4xx/5xx,不记录 body/header |
|
|
44
57
|
| 登录后站点 | `authProfile` | 必须配置 `allowedDomains`;默认不回写 Cookie |
|
|
45
58
|
| 固定站点增强 | `rulePack` | 只允许有界步骤;本地 init script 必须 SHA-256 固定且 ≤64KB |
|
|
46
59
|
| 模型生成的多步操作 | `browser_recipe_run` | 声明式步骤;审批策略由 `automationMode` 决定 |
|
|
@@ -50,6 +63,8 @@ dsh plugin --profile web add @anweat/dsh-browser@^0.1.11 dsh-web-search-pro@^0.1
|
|
|
50
63
|
| Reddit/小红书等 OpenCLI 平台 | `browser_opencli_status` → `browser_opencli_catalog` → `browser_opencli_run` | 先发现精确 adapter;通用调用除 `unrestricted` 外需审批 |
|
|
51
64
|
| 普通站点兼容性不佳 | `browserRuntime: patchright` | Chromium-only;建议专用 Chrome profile,不与指纹注入库叠加 |
|
|
52
65
|
|
|
66
|
+
所有网页访问、交互、脚本、Cookie 使用、上传和下载都必须由调用方或操作者根据目标网站规则及适用要求判断并使用。插件只执行被请求或批准的浏览器操作,不判断具体用途是否获得网站授权,也不承担调用方的合规责任。限流、审批、域名和文件边界用于约束执行面,不能替代目标网站规则。
|
|
67
|
+
|
|
53
68
|
DSH 会话示例:
|
|
54
69
|
|
|
55
70
|
```text
|
|
@@ -95,19 +110,25 @@ export function apply(ctx: Context) {
|
|
|
95
110
|
|
|
96
111
|
`unrestricted` 会允许模型直接运行外部脚本、通用 CLI 和安装命令,只应在隔离的测试 profile 或明确授权的自动化环境中使用;日常 profile 保持 `standard`。它只取消人工确认,**不会取消 `usagePolicy` 的并发、突发、页数、深度、重试与冷却保护**。模式改变后需要重启 DSH profile,工具目录才会按新配置重新注册。
|
|
97
112
|
|
|
98
|
-
## 工具(最多
|
|
113
|
+
## 工具(最多 30 个)
|
|
99
114
|
|
|
100
115
|
| 工具 | 作用 |
|
|
101
116
|
|---|---|
|
|
102
|
-
| `browser_open` | 打开 URL
|
|
103
|
-
| `browser_click` | 按 CSS
|
|
104
|
-
| `browser_type` | 向 input/textarea 输入 |
|
|
105
|
-
| `
|
|
117
|
+
| `browser_open` | 打开 URL,返回标题/可读文本/全页截图路径;可显式启用 console/network 内存捕获 |
|
|
118
|
+
| `browser_click` | 按 CSS 或结构化 Playwright locator 点击 |
|
|
119
|
+
| `browser_type` | 向 CSS 或语义定位的 input/textarea 输入 |
|
|
120
|
+
| `browser_wait` | 等待 locator 状态、URL glob、networkidle 或固定时间 |
|
|
121
|
+
| `browser_press` | 对 locator 或全局键盘发送按键 |
|
|
122
|
+
| `browser_select` | 按 locator 选择一个或多个 option value |
|
|
123
|
+
| `browser_check` | 按 locator 勾选或取消勾选控件 |
|
|
124
|
+
| `browser_hover` | 悬停 CSS 或语义 locator 并返回页面状态与截图 |
|
|
106
125
|
| `browser_set_files` | 把现有本地文件设置到 `input[type=file]`;绝对路径、数量和总大小受限 |
|
|
107
126
|
| `browser_evaluate` | 在当前页执行最长 20,000 字符的 JavaScript 表达式,返回最多 100,000 字符 JSON |
|
|
127
|
+
| `browser_console` | 读取本次显式捕获的脱敏 console 记录 |
|
|
128
|
+
| `browser_requests` | 读取本次显式捕获的失败及 HTTP 4xx/5xx 请求;无 body/header |
|
|
108
129
|
| `browser_scroll` | 纵向滚动(触发懒加载) |
|
|
109
130
|
| `browser_read` | 读当前页 URL/标题/文本(不截图) |
|
|
110
|
-
| `browser_screenshot` |
|
|
131
|
+
| `browser_screenshot` | 当前页、locator 或区域截图;普通文件名固定落在 `snapshotDir` |
|
|
111
132
|
| `browser_close` | 关闭当前页(下次 open 全新) |
|
|
112
133
|
| `browser_status` | 运行时状态(含 automationMode、已暴露工具及各类审批策略) |
|
|
113
134
|
| `browser_install` | 安装 playwright chromium(`browser_status` 报缺失时执行一次) |
|
|
@@ -194,14 +215,15 @@ return [...document.querySelectorAll('.result')].slice(0, 20).map(card => ({
|
|
|
194
215
|
- 使用显式 URL,新建独立 Playwright context;需要登录态时只能选已限域的 `authProfile`。
|
|
195
216
|
- 审批代表允许该脚本以当前站点登录身份操作页面;静态能力报告只用于解释,不是沙箱。
|
|
196
217
|
|
|
197
|
-
`browser_evaluate` 是面向当前持久页的短表达式入口,不使用 UserScript 元数据。它能调用页面已有 JavaScript、读取或修改 DOM、访问非 HttpOnly Cookie 和 Web Storage,也能通过 `fetch` 等浏览器 API 发起页面来源允许的请求。插件会明确报告这些能力,但不会判断具体网站是否允许该访问;调用方应根据目标网站规则及适用要求使用并承担相应责任,插件只执行被批准的浏览器操作。表达式没有 Node.js 全局对象或直接主机文件系统权限,结果必须可 JSON
|
|
218
|
+
`browser_evaluate` 是面向当前持久页的短表达式入口,不使用 UserScript 元数据。它能调用页面已有 JavaScript、读取或修改 DOM、访问非 HttpOnly Cookie 和 Web Storage,也能通过 `fetch` 等浏览器 API 发起页面来源允许的请求。插件会明确报告这些能力,但不会判断具体网站是否允许该访问;调用方应根据目标网站规则及适用要求使用并承担相应责任,插件只执行被批准的浏览器操作。表达式没有 Node.js 全局对象或直接主机文件系统权限,结果必须可 JSON 序列化;超时会通过 Chromium DevTools 终止页面 JavaScript,保留当前 page/context 供后续读取或导航。需要可复用、可审阅的脚本时仍使用 UserScript 资产流程。
|
|
198
219
|
|
|
199
220
|
## Cookie 与文件落盘
|
|
200
221
|
|
|
201
222
|
- `authProfile` 从配置的 `storageStatePath` 载入 Cookie、localStorage 等登录态。只有 `persistState: true` 才在 context 关闭时原子回写该文件;全局兼容路径默认不会被交互会话改写。
|
|
202
223
|
- `browser_evaluate` 可读取 `document.cookie`,因此能看到当前来源的非 HttpOnly Cookie;浏览器不会向页面 JavaScript 暴露 HttpOnly Cookie。除 `unrestricted` 外,每次执行都需要确认。
|
|
203
224
|
- `browser_set_files` 只读取调用中列出的绝对路径并交给当前页面上传控件,不修改源文件,也不会遍历目录。除 `unrestricted` 外,即使在 `autonomous` 模式也需要确认。
|
|
204
|
-
- `browser_screenshot` 和 `snapshot` 只向 `snapshotDir` 写入截图或 HTML
|
|
225
|
+
- `browser_screenshot` 和 `snapshot` 只向 `snapshotDir` 写入截图或 HTML;自定义截图名只允许普通文件名,拒绝绝对路径、目录分隔符和 `..`。持久登录态只写配置的状态文件。`browser_evaluate` 触发的浏览器下载不会由该工具保存或返回,下载落盘需要后续单独设计显式目录和文件名规则。
|
|
226
|
+
- console/network 捕获必须由 `browser_open.capture` 显式启用,只在内存保留最多 200 条;记录文本和 URL 查询中的常见 token/cookie/password 字段会脱敏,网络只保留方法、URL、失败原因或 4xx/5xx 状态,不保存 header/body。
|
|
205
227
|
|
|
206
228
|
常见读取任务优先用内置脚本:`article-clean`、`links`、`jsonld`、`forms`。它们不返回表单当前值,
|
|
207
229
|
也不触发点击或网络写操作。
|
package/lib/approval-policy.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { recipeNeedsApproval } from "./automation.js";
|
|
3
3
|
import { validateUserscript } from "./scripts.js";
|
|
4
4
|
import { isBrowserToolExposed } from "./freedom.js";
|
|
5
|
-
const DIRECT_INTERACTIONS = new Set(['browser_click', 'browser_type', 'browser_hover', 'browser_scroll']);
|
|
5
|
+
const DIRECT_INTERACTIONS = new Set(['browser_click', 'browser_type', 'browser_press', 'browser_select', 'browser_check', 'browser_hover', 'browser_scroll']);
|
|
6
6
|
const WEB_LOCAL_MUTATIONS = new Set(['web_cache_clear']);
|
|
7
7
|
export function browserPolicyDecision(name, args, mode = 'standard') {
|
|
8
8
|
if (!isBrowserToolExposed(name, mode) && name.startsWith('browser_')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../src/approval-policy.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,mBAAmB,EAA0B,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAuB,MAAM,cAAc,CAAA;AAOxE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../src/approval-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/** Loopback-only Host RPC for the automation asset review UI. */
|
|
2
2
|
import { executeAutomationAsset } from "./automation-execution.js";
|
|
3
|
-
const CHANNEL = '/
|
|
3
|
+
const CHANNEL = '/api';
|
|
4
|
+
const PREFIX = 'dsh-browser-assets';
|
|
5
|
+
const ENDPOINTS = ['snapshot', 'get', 'save', 'summarize', 'dismiss', 'validate', 'test', 'status'];
|
|
6
|
+
function failure(rpcId, message) {
|
|
7
|
+
return Response.json({
|
|
8
|
+
type: 'server-response',
|
|
9
|
+
rpcId,
|
|
10
|
+
result: { ok: false, error: { code: 'gateway/bad-request', message, details: {} } },
|
|
11
|
+
});
|
|
12
|
+
}
|
|
4
13
|
function record(payload) {
|
|
5
14
|
if (!payload || typeof payload !== 'object' || Array.isArray(payload))
|
|
6
15
|
throw new Error('request payload must be an object');
|
|
@@ -17,7 +26,7 @@ function stringField(payload, name) {
|
|
|
17
26
|
export function registerAutomationAssetRpc(ctx, store, service) {
|
|
18
27
|
ctx.inject(['connection'], (connectionCtx) => {
|
|
19
28
|
const connection = connectionCtx.connection;
|
|
20
|
-
const
|
|
29
|
+
const handler = async (endpoint, rawPayload) => {
|
|
21
30
|
try {
|
|
22
31
|
const payload = record(rawPayload);
|
|
23
32
|
let value;
|
|
@@ -49,15 +58,47 @@ export function registerAutomationAssetRpc(ctx, store, service) {
|
|
|
49
58
|
case 'status':
|
|
50
59
|
value = store.setStatus(stringField(payload, 'id'), stringField(payload, 'status'));
|
|
51
60
|
break;
|
|
52
|
-
default: return { ok: false, error: { code: 'not-found', message: `unknown automation asset endpoint: ${endpoint}
|
|
61
|
+
default: return { ok: false, error: { code: 'not-found', message: `unknown automation asset endpoint: ${endpoint}`, details: {} } };
|
|
53
62
|
}
|
|
54
63
|
return { ok: true, value };
|
|
55
64
|
}
|
|
56
65
|
catch (error) {
|
|
57
|
-
return { ok: false, error: { code: 'bad-request', message: String(error instanceof Error ? error.message : error).slice(0, 500) } };
|
|
66
|
+
return { ok: false, error: { code: 'bad-request', message: String(error instanceof Error ? error.message : error).slice(0, 500), details: {} } };
|
|
58
67
|
}
|
|
59
|
-
}
|
|
60
|
-
|
|
68
|
+
};
|
|
69
|
+
for (const endpoint of ENDPOINTS) {
|
|
70
|
+
const method = `${PREFIX}/${endpoint}`;
|
|
71
|
+
connectionCtx.effect(() => connection.fetch.register({
|
|
72
|
+
path: `${CHANNEL}/${method}`,
|
|
73
|
+
methods: ['POST'],
|
|
74
|
+
requestBody: 'buffered',
|
|
75
|
+
fetch: async (request) => {
|
|
76
|
+
let body;
|
|
77
|
+
try {
|
|
78
|
+
body = await request.json();
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return new Response('body is not JSON', { status: 400 });
|
|
82
|
+
}
|
|
83
|
+
const rpcId = typeof body === 'object' && body !== null
|
|
84
|
+
&& typeof body.rpcId === 'string'
|
|
85
|
+
? body.rpcId
|
|
86
|
+
: 'invalid-request';
|
|
87
|
+
if (typeof body !== 'object' || body === null
|
|
88
|
+
|| body.type !== 'client-request'
|
|
89
|
+
|| body.method !== method) {
|
|
90
|
+
return failure(rpcId, 'invalid RPC request');
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const result = await handler(endpoint, body.payload, request.signal);
|
|
94
|
+
return Response.json({ type: 'server-response', rpcId, result });
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return failure(rpcId, String(error instanceof Error ? error.message : error).slice(0, 500));
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
}), `dsh-browser: ${method} RPC route`);
|
|
101
|
+
}
|
|
61
102
|
});
|
|
62
103
|
}
|
|
63
104
|
//# sourceMappingURL=automation-assets-rpc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation-assets-rpc.js","sourceRoot":"","sources":["../src/automation-assets-rpc.ts"],"names":[],"mappings":"AAAA,iEAAiE;
|
|
1
|
+
{"version":3,"file":"automation-assets-rpc.js","sourceRoot":"","sources":["../src/automation-assets-rpc.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAMjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAElE,MAAM,OAAO,GAAG,MAAM,CAAA;AACtB,MAAM,MAAM,GAAG,oBAAoB,CAAA;AACnC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAA;AAE5G,SAAS,OAAO,CAAC,KAAa,EAAE,OAAe;IAC7C,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,iBAAiB;QACvB,KAAK;QACL,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;KACpF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,OAAgB;IAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAC3H,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC1G,OAAO,OAAkC,CAAA;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,OAAgC,EAAE,IAAY;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;IAC9H,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAY,EAAE,KAA2B,EAAE,OAAuB;IAC3G,GAAG,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE;QAC3C,MAAM,UAAU,GAAI,aAWlB,CAAC,UAAU,CAAA;QACb,MAAM,OAAO,GAAyB,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;YACnE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;gBAClC,IAAI,KAAc,CAAA;gBAClB,QAAQ,QAAQ,EAAE,CAAC;oBACjB,KAAK,UAAU;wBAAE,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAAC,MAAK;oBAChD,KAAK,KAAK;wBAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;wBAAC,MAAK;oBACxE,KAAK,MAAM;wBAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAA0E,CAAC,CAAC;wBAAC,MAAK;oBAC/H,KAAK,WAAW;wBAAE,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;wBAAC,MAAK;oBACrF,KAAK,SAAS;wBAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;wBAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAAC,MAAK;oBACnG,KAAK,UAAU;wBAAE,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;wBAAC,MAAK;oBAC1E,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;wBAC7I,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;wBACpB,MAAK;oBACP,CAAC;oBACD,KAAK,QAAQ;wBAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,CAA0B,CAAC,CAAC;wBAAC,MAAK;oBAClI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,OAAO,EAAE,sCAAsC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAA;gBAC9I,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAsB,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAA;YAC3J,CAAC;QACH,CAAC,CAAA;QACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAA;YACtC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACnD,IAAI,EAAE,GAAG,OAAO,IAAI,MAAM,EAAE;gBAC5B,OAAO,EAAE,CAAC,MAAM,CAAC;gBACjB,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBACvB,IAAI,IAAa,CAAA;oBACjB,IAAI,CAAC;wBACH,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;oBAC7B,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC1D,CAAC;oBACD,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;2BAClD,OAAQ,IAA4B,CAAC,KAAK,KAAK,QAAQ;wBAC1D,CAAC,CAAE,IAA0B,CAAC,KAAK;wBACnC,CAAC,CAAC,iBAAiB,CAAA;oBACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;2BACvC,IAA2B,CAAC,IAAI,KAAK,gBAAgB;2BACrD,IAA6B,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBACtD,OAAO,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAA;oBAC9C,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAG,IAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;wBAC/F,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBAClE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;oBAC7F,CAAC;gBACH,CAAC;aACF,CAAC,EAAE,gBAAgB,MAAM,YAAY,CAAC,CAAA;QACzC,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/lib/browser-service.d.ts
CHANGED
|
@@ -82,6 +82,47 @@ export interface EvaluateResult {
|
|
|
82
82
|
export interface FileUploadResult extends InteractiveState {
|
|
83
83
|
files: string[];
|
|
84
84
|
}
|
|
85
|
+
export interface BrowserFrameSpec {
|
|
86
|
+
selector?: string;
|
|
87
|
+
name?: string;
|
|
88
|
+
url?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface BrowserLocatorSpec {
|
|
91
|
+
selector?: string;
|
|
92
|
+
role?: string;
|
|
93
|
+
name?: string;
|
|
94
|
+
text?: string;
|
|
95
|
+
label?: string;
|
|
96
|
+
exact?: boolean;
|
|
97
|
+
frame?: BrowserFrameSpec;
|
|
98
|
+
}
|
|
99
|
+
export type BrowserTarget = string | BrowserLocatorSpec;
|
|
100
|
+
export interface BrowserConsoleRecord {
|
|
101
|
+
type: string;
|
|
102
|
+
text: string;
|
|
103
|
+
url?: string;
|
|
104
|
+
timestamp: string;
|
|
105
|
+
}
|
|
106
|
+
export interface BrowserRequestRecord {
|
|
107
|
+
method: string;
|
|
108
|
+
url: string;
|
|
109
|
+
status?: number;
|
|
110
|
+
failure?: string;
|
|
111
|
+
timestamp: string;
|
|
112
|
+
}
|
|
113
|
+
export interface BrowserScreenshotOptions {
|
|
114
|
+
target?: BrowserTarget;
|
|
115
|
+
clip?: {
|
|
116
|
+
x: number;
|
|
117
|
+
y: number;
|
|
118
|
+
width: number;
|
|
119
|
+
height: number;
|
|
120
|
+
};
|
|
121
|
+
fullPage?: boolean;
|
|
122
|
+
format?: 'png' | 'jpeg';
|
|
123
|
+
quality?: number;
|
|
124
|
+
filename?: string;
|
|
125
|
+
}
|
|
85
126
|
export interface CrawlPage {
|
|
86
127
|
url: string;
|
|
87
128
|
title: string;
|
|
@@ -150,6 +191,10 @@ export declare class BrowserService {
|
|
|
150
191
|
private readonly authProfiles;
|
|
151
192
|
private readonly usageGovernor;
|
|
152
193
|
private opencliCatalogCache?;
|
|
194
|
+
private captureConsoleEnabled;
|
|
195
|
+
private captureNetworkEnabled;
|
|
196
|
+
private capturedConsole;
|
|
197
|
+
private capturedRequests;
|
|
153
198
|
constructor(config: ResolvedConfig);
|
|
154
199
|
available(): boolean;
|
|
155
200
|
private assertEnabled;
|
|
@@ -223,25 +268,46 @@ export declare class BrowserService {
|
|
|
223
268
|
inputs?: Record<string, string>;
|
|
224
269
|
}): Promise<ScriptRunResult>;
|
|
225
270
|
private ensureActivePage;
|
|
271
|
+
private attachCapture;
|
|
272
|
+
private resetCapture;
|
|
273
|
+
private resolveTarget;
|
|
274
|
+
private screenshotFile;
|
|
226
275
|
private captureScreenshot;
|
|
227
276
|
private readState;
|
|
228
277
|
open(url: string, opts?: {
|
|
229
278
|
waitMs?: number;
|
|
230
279
|
authProfile?: string;
|
|
231
280
|
rulePack?: string;
|
|
281
|
+
capture?: readonly ('console' | 'network')[];
|
|
232
282
|
}): Promise<InteractiveState>;
|
|
233
|
-
click(
|
|
283
|
+
click(target: BrowserTarget, opts?: {
|
|
234
284
|
timeoutMs?: number;
|
|
235
285
|
waitMs?: number;
|
|
236
286
|
}): Promise<InteractiveState>;
|
|
237
|
-
type(
|
|
287
|
+
type(target: BrowserTarget, text: string, opts?: {
|
|
238
288
|
timeoutMs?: number;
|
|
239
289
|
}): Promise<InteractiveState>;
|
|
240
|
-
|
|
290
|
+
wait(target: BrowserTarget | undefined, opts?: {
|
|
291
|
+
urlPattern?: string;
|
|
292
|
+
networkIdle?: boolean;
|
|
293
|
+
timeMs?: number;
|
|
294
|
+
state?: 'visible' | 'hidden' | 'attached' | 'detached';
|
|
295
|
+
timeoutMs?: number;
|
|
296
|
+
}): Promise<InteractiveState>;
|
|
297
|
+
press(target: BrowserTarget | undefined, key: string, opts?: {
|
|
298
|
+
timeoutMs?: number;
|
|
299
|
+
}): Promise<InteractiveState>;
|
|
300
|
+
select(target: BrowserTarget, values: readonly string[], opts?: {
|
|
301
|
+
timeoutMs?: number;
|
|
302
|
+
}): Promise<InteractiveState>;
|
|
303
|
+
check(target: BrowserTarget, checked?: boolean, opts?: {
|
|
304
|
+
timeoutMs?: number;
|
|
305
|
+
}): Promise<InteractiveState>;
|
|
306
|
+
hover(target: BrowserTarget, opts?: {
|
|
241
307
|
timeoutMs?: number;
|
|
242
308
|
waitMs?: number;
|
|
243
309
|
}): Promise<InteractiveState>;
|
|
244
|
-
setFiles(
|
|
310
|
+
setFiles(target: BrowserTarget, files: readonly string[], opts?: {
|
|
245
311
|
timeoutMs?: number;
|
|
246
312
|
}): Promise<FileUploadResult>;
|
|
247
313
|
evaluate(expression: string, opts?: {
|
|
@@ -251,7 +317,22 @@ export declare class BrowserService {
|
|
|
251
317
|
waitMs?: number;
|
|
252
318
|
}): Promise<InteractiveState>;
|
|
253
319
|
read(): Promise<InteractiveState>;
|
|
254
|
-
|
|
320
|
+
consoleMessages(opts?: {
|
|
321
|
+
level?: string;
|
|
322
|
+
limit?: number;
|
|
323
|
+
clear?: boolean;
|
|
324
|
+
}): {
|
|
325
|
+
enabled: boolean;
|
|
326
|
+
records: BrowserConsoleRecord[];
|
|
327
|
+
};
|
|
328
|
+
networkRequests(opts?: {
|
|
329
|
+
limit?: number;
|
|
330
|
+
clear?: boolean;
|
|
331
|
+
}): {
|
|
332
|
+
enabled: boolean;
|
|
333
|
+
records: BrowserRequestRecord[];
|
|
334
|
+
};
|
|
335
|
+
screenshot(options?: BrowserScreenshotOptions): Promise<{
|
|
255
336
|
path: string;
|
|
256
337
|
}>;
|
|
257
338
|
recipe(steps: readonly BrowserRecipeStep[], opts?: {
|