@anweat/dsh-browser 0.1.14-alpha.1 → 0.1.15-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/AUDIT.md ADDED
@@ -0,0 +1,47 @@
1
+ # 2026-09-10 代码、issue 与构建审查
2
+
3
+ 基于 `2f6a134` / 0.1.12;本地候选包 0.1.13,尚未发布。Windows x64、Node 24.14.0、pnpm 11.7.0。
4
+
5
+ ## 本轮修复
6
+
7
+ | 问题 | 影响与处理 | 验证 |
8
+ |---|---|---|
9
+ | 激活资产的 UserScript 在 autonomous 下直接放行 | 资产入口读取 Host 保存的真实 kind;UserScript 和未知 kind 继续审批,recipe 维持原策略 | 策略回归覆盖三种 kind 情形 |
10
+ | UserScript 只验证输入 URL | 重定向后可能在不匹配的页面执行源码;现在执行前再次验证最终 URL | 本地 HTTP 302 + 真实 Chrome 拒绝执行 |
11
+ | authProfile 把整个 storageState 文件装入 context | 文件中的无关域 Cookie/Storage 可能被带入页面请求;现在只装载 allowedDomains 内的条目 | 真实 context storageState 检查 |
12
+ | open 接受 file 等非网页协议 | 与 HTTP(S) 工具契约不一致;在创建/复用 context 前拒绝 | file URL 负例 |
13
+ | 资产 UI 使用专用旧 Connection RPC channel | 在 Connection 先于 WebServer 时可能无物理路由;迁到共享认证 /api 的八个精确 POST 路由 | 真实 0.1.5-rc.1 Connection/WebServer:认证成功、未认证 401、未知路径 404、卸载撤销 |
14
+ | 隐藏 input[type=file] 等待可见导致超时 | 改为等待 attached,再执行 setInputFiles | 真实隐藏控件上传 fixture |
15
+ | wait timeoutMs=0 实际关闭超时 | 改为 1–30000 ms,拒绝未知 condition | 参数负例 |
16
+
17
+ 增加 browser_wait / browser_press / browser_select / browser_check,复用 Recipe 执行路径、取消信号和现有审批规则。当前最多 28 个工具,read-only 为 15 个。
18
+
19
+ ## 必须准确理解的边界
20
+
21
+ - `allowedDomains` 是登录态选择及装载过滤,不是网络隔离。站点重定向、子资源、iframe、页面 fetch、WebSocket 等不受完整网络出口策略约束;本插件不是 SSRF 沙箱。对不可信网页需要独立浏览器/账号及 OS 或代理层网络控制。
22
+ - `@match` 是执行准入规则,不是 JavaScript 沙箱;代码启动后可导航、读写页面或调用网络。UserScript 能力标签来自静态识别,不是权限强制执行。
23
+ - rulePack 是操作者提供的受信配置。固定 SHA-256 证明文件身份,不限制代码能力;init script 也不能解释为来源隔离。
24
+ - read-only 限制模型工具的直接写操作,不保证网页无副作用。页面加载、站点脚本和操作者配置的 rulePack 都可能改变站点状态。
25
+ - Cordis `browser` 服务是供受信插件调用的底层接口;模型审批发生在 Host 工具钩子,不能当作任意插件直接调用服务时的安全边界。
26
+ - 一份 BrowserService 只有一份持久活动页;这里没有实现每 Agent/会话独立浏览器容器。与内置 browser 共存还需 service realm、工具 scope 和 Agent 绑定;仅改 entry id 或工具前缀不够。
27
+ - browser_evaluate 超时仍关闭活动页。单纯 Promise.race 超时不会停止页面代码,不能为了保留页面而宣称执行已取消。
28
+ - 资产 UI 操作通过 Host 认证通道,由操作者点击触发,不经过模型工具审批。没有新增匿名写接口。
29
+
30
+ ## 真实 issue 对照与剩余工作
31
+
32
+ | 来源 | 当前判断 |
33
+ |---|---|
34
+ | [#19 基础操作与诊断](https://github.com/anweat/dsh-browser/issues/19) | wait/press/select/check 已补;语义定位、console/network 缓冲、局部截图、iframe 和会话参数仍是后续功能,未宣称整条关闭 |
35
+ | [#15 evaluate、上传、hover](https://github.com/anweat/dsh-browser/issues/15) | 0.1.12 已存在;本轮补隐藏上传与脚本边界 |
36
+ | [#11 内置 browser 冲突](https://github.com/anweat/dsh-browser/issues/11) | 仍成立:默认 bundle id=browser、service=browser,五个同名工具;substrate npm 包只修 entry id |
37
+ | [#13 settingsNamespace](https://github.com/anweat/dsh-browser/issues/13) | 当前代码已移除运行时导入;保留类型依赖不等于运行时旧导出依赖 |
38
+ | [#10 prompt 变量](https://github.com/anweat/dsh-browser/issues/10) | 工具 schema 回归通过 |
39
+ | [#9 Chromium 状态](https://github.com/anweat/dsh-browser/issues/9) | 当前有文件存在性检查;系统 Chrome 状态与缓存 Chromium 状态仍须区分 |
40
+
41
+ 后续调用记录应依托 Host 的 callId/owner/scope/approval/result 事件;默认不记录输入正文、Cookie、脚本、文件路径或网页全文。全局按名字匹配的审批钩子在多 provider 组合中还需要归属隔离,不能靠名字列表自动推断所有权。
42
+
43
+ ## 验收范围
44
+
45
+ `npm run verify`:42 项测试通过、TypeScript 与构建通过、client bundle 检查通过。包含真实 Chrome、Playwright、Patchright 测试。`node scripts/check-host-rpc.mjs <exact-installed-host-root>` 验证真实 HTTP/认证路由。
46
+
47
+ 这不是完整 DSH UI/所有旧版 Host/多 Agent 隔离/网络沙箱的生产证明。旧问题解决与新功能缺口分别记录,未向外发布或关闭 issue。
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # dsh-browser
2
2
 
3
+ 本地整合候选的修复、工具清单与安全边界见 [AUDIT.md](AUDIT.md)。`allowedDomains` 只限制认证状态装载,不是网络防火墙或 Agent 隔离边界。
4
+
3
5
  自包含的浏览器运行时插件 for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)。
4
6
 
5
7
  把 **Playwright / Patchright(可选 Chromium 驱动)** 与 **OpenCLI** 作为插件自身的 npm 依赖打包(优先插件本地,缺省回退全局复用),对外提供一个 `browser` 服务 + 一组交互式浏览器工具。`dsh-web-search-pro` 通过 `inject: ['browser']` 注入该服务,驱动它的浏览器 / OpenCLI 后端——**不再依赖全局 CLI**。
@@ -9,4 +9,4 @@ export type BrowserPolicyDecision = {
9
9
  kind: 'ask';
10
10
  reason: string;
11
11
  };
12
- export declare function browserPolicyDecision(name: string, args: unknown, mode?: AutomationMode): BrowserPolicyDecision;
12
+ export declare function browserPolicyDecision(name: string, args: unknown, mode?: AutomationMode, assetKind?: 'recipe' | 'userscript'): BrowserPolicyDecision;
@@ -4,7 +4,7 @@ import { validateUserscript } from "./scripts.js";
4
4
  import { isBrowserToolExposed } from "./freedom.js";
5
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
- export function browserPolicyDecision(name, args, mode = 'standard') {
7
+ export function browserPolicyDecision(name, args, mode = 'standard', assetKind) {
8
8
  if (!isBrowserToolExposed(name, mode) && name.startsWith('browser_')) {
9
9
  return { kind: 'deny', reason: `Browser tool ${name} is disabled by automationMode=${mode}` };
10
10
  }
@@ -86,7 +86,7 @@ export function browserPolicyDecision(name, args, mode = 'standard') {
86
86
  if (name === 'browser_automation_run') {
87
87
  if (mode === 'read-only')
88
88
  return { kind: 'deny', reason: `Reusable automation execution is disabled by automationMode=${mode}` };
89
- if (mode === 'autonomous' || mode === 'unrestricted')
89
+ if (mode === 'unrestricted' || (mode === 'autonomous' && assetKind === 'recipe'))
90
90
  return { kind: 'allow' };
91
91
  return { kind: 'ask', reason: 'Run an active reusable browser automation asset' };
92
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../src/approval-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../src/approval-policy.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface ResolvedAuthProfile extends AuthProfileConfig {
8
8
  id: string;
9
9
  persistState: boolean;
10
10
  }
11
+ export declare function hostAllowed(hostname: string, domains: readonly string[]): boolean;
11
12
  export declare class AuthProfileStore {
12
13
  private readonly profiles;
13
14
  constructor(profiles?: Record<string, AuthProfileConfig>);
@@ -1,4 +1,4 @@
1
- function hostAllowed(hostname, domains) {
1
+ export function hostAllowed(hostname, domains) {
2
2
  const host = hostname.toLowerCase().replace(/\.$/, '');
3
3
  return domains.some(value => {
4
4
  const domain = value.toLowerCase().trim().replace(/^\*\./, '').replace(/\.$/, '');
@@ -1 +1 @@
1
- {"version":3,"file":"auth-profiles.js","sourceRoot":"","sources":["../src/auth-profiles.ts"],"names":[],"mappings":"AAYA,SAAS,WAAW,CAAC,QAAgB,EAAE,OAA0B;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,WAA8C,EAAE;QAAhD,aAAQ,GAAR,QAAQ,CAAwC;IAAG,CAAC;IAEjF,OAAO,CAAC,EAAU,EAAE,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,sBAAsB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3I,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAA;QACzG,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAA;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,qCAAqC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC7H,CAAC;aAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,oCAAoC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACzG,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAA;IACzC,CAAC;IAED,IAAI;QACF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;IAChN,CAAC;CACF;AACD,OAAO,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"auth-profiles.js","sourceRoot":"","sources":["../src/auth-profiles.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,OAA0B;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,WAA8C,EAAE;QAAhD,aAAQ,GAAR,QAAQ,CAAwC;IAAG,CAAC;IAEjF,OAAO,CAAC,EAAU,EAAE,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,sBAAsB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3I,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAA;QACzG,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAA;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,qCAAqC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC7H,CAAC;aAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,oCAAoC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACzG,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAA;IACzC,CAAC;IAED,IAAI;QACF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;IAChN,CAAC;CACF;AACD,OAAO,EAAE,MAAM,SAAS,CAAA"}
package/lib/automation.js CHANGED
@@ -26,7 +26,9 @@ export function validateRecipe(steps) {
26
26
  for (const step of steps) {
27
27
  switch (step.type) {
28
28
  case 'wait': {
29
- finite(step.timeoutMs, 15_000, 0, 30_000, 'wait timeoutMs');
29
+ if (!['selector', 'text', 'load', 'time'].includes(step.condition))
30
+ throw new Error('unsupported wait condition');
31
+ finite(step.timeoutMs, 15_000, 1, 30_000, 'wait timeoutMs');
30
32
  if (step.condition === 'selector')
31
33
  selector(step.value);
32
34
  else if (step.condition === 'text')
@@ -100,7 +102,7 @@ export async function runRecipe(page, steps, captureScreenshot, signal) {
100
102
  let value;
101
103
  switch (step.type) {
102
104
  case 'wait': {
103
- const timeout = finite(step.timeoutMs, 15_000, 0, 30_000, 'wait timeoutMs');
105
+ const timeout = finite(step.timeoutMs, 15_000, 1, 30_000, 'wait timeoutMs');
104
106
  if (step.condition === 'selector')
105
107
  await page.locator(selector(step.value)).first().waitFor({ state: 'visible', timeout });
106
108
  else if (step.condition === 'text')
@@ -1 +1 @@
1
- {"version":3,"file":"automation.js","sourceRoot":"","sources":["../src/automation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation.js","sourceRoot":"","sources":["../src/automation.ts"],"names":[],"mappings":"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"}
@@ -198,6 +198,10 @@ export declare class BrowserService {
198
198
  constructor(config: ResolvedConfig);
199
199
  available(): boolean;
200
200
  private assertEnabled;
201
+ private browserConnected;
202
+ private clearActiveState;
203
+ private handleBrowserDisconnected;
204
+ private trackBrowser;
201
205
  private ensure;
202
206
  /** Run `playwright install chromium` from the bundled playwright CLI. */
203
207
  installChromium(): Promise<CliResult>;
@@ -22,7 +22,7 @@ import fs from 'node:fs';
22
22
  import path from 'node:path';
23
23
  import crypto from 'node:crypto';
24
24
  import { browserRuntimeCliPath, loadBrowserRuntime, opencliEntryPath, runOpencli, runNode } from "./deps.js";
25
- import { AuthProfileStore } from "./auth-profiles.js";
25
+ import { AuthProfileStore, hostAllowed } from "./auth-profiles.js";
26
26
  import { applyRuleSteps, resolveRulePack } from "./rule-packs.js";
27
27
  import { runRecipe } from "./automation.js";
28
28
  import { BUILTIN_SCRIPTS, builtinScript, executeUserscript, validateUserscript } from "./scripts.js";
@@ -173,10 +173,35 @@ export class BrowserService {
173
173
  if (!this.config.enabled)
174
174
  throw new Error('dsh-browser: browser service is disabled');
175
175
  }
176
+ browserConnected(browser = this.browser) {
177
+ return !!browser && (typeof browser.isConnected !== 'function' || browser.isConnected());
178
+ }
179
+ clearActiveState() {
180
+ this.activeContext = undefined;
181
+ this.activePage = undefined;
182
+ this.activeProfile = undefined;
183
+ this.activeRulePack = undefined;
184
+ this.resetCapture();
185
+ }
186
+ handleBrowserDisconnected(browser) {
187
+ // A late event from an older process must not invalidate its replacement.
188
+ if (this.browser !== browser)
189
+ return;
190
+ this.browser = undefined;
191
+ this.launching = undefined;
192
+ this.clearActiveState();
193
+ }
194
+ trackBrowser(browser) {
195
+ this.browser = browser;
196
+ browser.on?.('disconnected', () => this.handleBrowserDisconnected(browser));
197
+ return browser;
198
+ }
176
199
  async ensure() {
177
200
  this.assertEnabled();
178
- if (this.browser)
201
+ if (this.browserConnected())
179
202
  return this.browser;
203
+ if (this.browser)
204
+ this.handleBrowserDisconnected(this.browser);
180
205
  if (!this.launching) {
181
206
  this.launching = (async () => {
182
207
  const pw = loadBrowserRuntime(this.config.browserRuntime);
@@ -185,15 +210,22 @@ export class BrowserService {
185
210
  launchOptions.channel = this.config.channel;
186
211
  if (this.config.executablePath)
187
212
  launchOptions.executablePath = this.config.executablePath;
213
+ const args = [...(this.config.args ?? [])];
214
+ if (this.config.cdpPort) {
215
+ args.push(`--remote-debugging-port=${this.config.cdpPort}`);
216
+ }
217
+ if (args.length > 0) {
218
+ launchOptions.args = args;
219
+ }
188
220
  try {
189
- this.browser = await pw.chromium.launch(launchOptions);
221
+ return this.trackBrowser(await pw.chromium.launch(launchOptions));
190
222
  }
191
223
  catch (error) {
192
224
  const msg = String(error);
193
225
  if (/Executable doesn't exist|playwright install|not found/i.test(msg)) {
194
226
  if (this.config.autoInstall) {
195
227
  await this.installChromium();
196
- this.browser = await pw.chromium.launch(launchOptions);
228
+ return this.trackBrowser(await pw.chromium.launch(launchOptions));
197
229
  }
198
230
  else {
199
231
  throw new Error('dsh-browser: chromium is not installed for ' + this.config.browserRuntime + '. Run the browser_install tool, or: node "' + browserRuntimeCliPath(this.config.browserRuntime) + '" install chromium');
@@ -203,13 +235,16 @@ export class BrowserService {
203
235
  throw error;
204
236
  }
205
237
  }
206
- return this.browser;
207
- })().catch((error) => {
238
+ })();
239
+ }
240
+ const launching = this.launching;
241
+ try {
242
+ return await launching;
243
+ }
244
+ finally {
245
+ if (this.launching === launching)
208
246
  this.launching = undefined;
209
- throw error;
210
- });
211
247
  }
212
- return this.launching;
213
248
  }
214
249
  /** Run `playwright install chromium` from the bundled playwright CLI. */
215
250
  installChromium() {
@@ -236,14 +271,38 @@ export class BrowserService {
236
271
  return response;
237
272
  }
238
273
  async transientContext(url, opts = {}) {
239
- const browser = await this.ensure();
274
+ if (!['http:', 'https:'].includes(new URL(url).protocol))
275
+ throw new Error('browser navigation requires an HTTP(S) URL');
240
276
  const profileId = opts.anonymous ? undefined : (opts.authProfile ?? this.config.defaultAuthProfile);
241
277
  const profile = profileId ? this.authProfiles.resolve(profileId, url) : undefined;
242
278
  const rulePack = resolveRulePack(this.config.rulePacks, opts.rulePack, url);
243
279
  const stateOptions = profile
244
280
  ? storageStateOptions(profile.storageStatePath, `auth profile ${profile.id}`, profile.persistState)
245
281
  : (!opts.anonymous ? storageStateOptions(this.config.storageStatePath, 'global') : {});
246
- const context = await browser.newContext(stateOptions);
282
+ let scopedState;
283
+ if (profile && stateOptions.storageState) {
284
+ const state = JSON.parse(fs.readFileSync(stateOptions.storageState, 'utf8'));
285
+ scopedState = {
286
+ cookies: (state.cookies ?? []).filter((cookie) => hostAllowed(cookie.domain.replace(/^\./, ''), profile.allowedDomains)),
287
+ origins: (state.origins ?? []).filter((origin) => hostAllowed(new URL(origin.origin).hostname, profile.allowedDomains)),
288
+ };
289
+ }
290
+ const contextOptions = { ...stateOptions, ...(scopedState ? { storageState: scopedState } : {}) };
291
+ let context;
292
+ for (let attempt = 0; attempt < 2; attempt++) {
293
+ const browser = await this.ensure();
294
+ try {
295
+ context = await browser.newContext(contextOptions);
296
+ break;
297
+ }
298
+ catch (error) {
299
+ if (attempt > 0 || this.browserConnected(browser))
300
+ throw error;
301
+ this.handleBrowserDisconnected(browser);
302
+ }
303
+ }
304
+ if (!context)
305
+ throw new Error('dsh-browser: browser context could not be created after reconnecting');
247
306
  try {
248
307
  if (rulePack?.initScriptPath)
249
308
  await context.addInitScript({ path: rulePack.initScriptPath });
@@ -257,7 +316,17 @@ export class BrowserService {
257
316
  async persistAndClose(session) {
258
317
  try {
259
318
  if (session.profile?.persistState) {
260
- const state = await session.context.storageState();
319
+ let state;
320
+ try {
321
+ state = await session.context.storageState();
322
+ }
323
+ catch (error) {
324
+ // A crashed browser cannot provide state. Filesystem failures below
325
+ // still propagate so failed persistence is never reported as success.
326
+ if (/target page, context or browser has been closed|browser has been closed|browser disconnected/i.test(String(error)))
327
+ return;
328
+ throw error;
329
+ }
261
330
  fs.mkdirSync(path.dirname(session.profile.storageStatePath), { recursive: true });
262
331
  const temporary = session.profile.storageStatePath + '.tmp-' + uid().slice(0, 8);
263
332
  fs.writeFileSync(temporary, JSON.stringify(state, null, 2), { encoding: 'utf8', mode: 0o600 });
@@ -544,6 +613,9 @@ export class BrowserService {
544
613
  await this.navigate(page, url, { waitUntil: 'domcontentloaded', timeout: 30_000 }, signal);
545
614
  await page.waitForLoadState('networkidle', { timeout: 8_000 }).catch(() => { });
546
615
  await applyRuleSteps(page, session.rulePack);
616
+ const finalValidation = validateUserscript(source, page.url());
617
+ if (!finalValidation.valid)
618
+ throw new Error('userscript redirected outside its allowed match: ' + finalValidation.errors.join('; '));
547
619
  const timeoutMs = Math.min(Math.max(opts.timeoutMs ?? 15_000, 1_000), 30_000);
548
620
  const timeout = new Promise((_resolve, reject) => {
549
621
  timer = setTimeout(() => {
@@ -576,6 +648,10 @@ export class BrowserService {
576
648
  }
577
649
  // ── interactive surface (one persistent context + page) ──────────────────
578
650
  async ensureActivePage(targetUrl, opts = {}) {
651
+ if (targetUrl && !['http:', 'https:'].includes(new URL(targetUrl).protocol))
652
+ throw new Error('browser navigation requires an HTTP(S) URL');
653
+ if (this.activePage && (this.activePage.isClosed() || !this.browserConnected()))
654
+ await this.closePage();
579
655
  if (this.activePage && !this.activePage.isClosed()) {
580
656
  if (!targetUrl)
581
657
  return this.activePage;
@@ -603,6 +679,17 @@ export class BrowserService {
603
679
  return this.activePage;
604
680
  }
605
681
  attachCapture(page) {
682
+ const release = () => {
683
+ if (this.activePage !== page)
684
+ return;
685
+ const context = this.activeContext;
686
+ const profile = this.activeProfile;
687
+ this.clearActiveState();
688
+ if (context)
689
+ void this.persistAndClose({ context, ...profile ? { profile } : {} }).catch(() => { });
690
+ };
691
+ page.on('close', release);
692
+ page.on('crash', release);
606
693
  page.on('console', (message) => {
607
694
  if (!this.captureConsoleEnabled)
608
695
  return;
@@ -961,16 +1048,14 @@ export class BrowserService {
961
1048
  }
962
1049
  }
963
1050
  async closePage() {
964
- if (this.activePage) {
965
- await this.activePage.close().catch(() => { });
966
- }
967
- this.activePage = undefined;
968
- if (this.activeContext)
969
- await this.persistAndClose({ context: this.activeContext, ...this.activeProfile ? { profile: this.activeProfile } : {} });
970
- this.activeContext = undefined;
971
- this.activeProfile = undefined;
972
- this.activeRulePack = undefined;
973
- this.resetCapture();
1051
+ const page = this.activePage;
1052
+ const context = this.activeContext;
1053
+ const profile = this.activeProfile;
1054
+ this.clearActiveState();
1055
+ if (page)
1056
+ await page.close().catch(() => { });
1057
+ if (context)
1058
+ await this.persistAndClose({ context, ...profile ? { profile } : {} });
974
1059
  }
975
1060
  async status() {
976
1061
  let chromiumInstalled = false;
@@ -1034,8 +1119,8 @@ export class BrowserService {
1034
1119
  builtinScripts: BUILTIN_SCRIPTS.map(script => script.id),
1035
1120
  externalUserscriptsRequireApproval: ['standard', 'autonomous'].includes(this.config.automationMode),
1036
1121
  mutatingRecipesRequireApproval: this.config.automationMode === 'standard',
1037
- ...(this.activePage && !this.activePage.isClosed() ? { activeUrl: this.activePage.url() } : {}),
1038
- ...this.activeProfile ? { activeAuthProfile: this.activeProfile.id } : {},
1122
+ ...(this.browserConnected() && this.activePage && !this.activePage.isClosed() ? { activeUrl: this.activePage.url() } : {}),
1123
+ ...(this.browserConnected() && this.activePage && !this.activePage.isClosed() && this.activeProfile ? { activeAuthProfile: this.activeProfile.id } : {}),
1039
1124
  };
1040
1125
  }
1041
1126
  async close() {