dsh-browser:为 DSH 提供自包含的浏览器运行时

前言

在 DeepSeek Harness(DSH)里做联网任务,常见做法是依赖全局安装的 Playwright、OpenCLI 或外部 CLI。环境不一致时,插件之间难以共享同一套浏览器后端;dsh-web-search-pro 等联网插件也往往要单独处理驱动安装与调用路径。

@anweat/dsh-browser 把 Playwright(Chromium)与 OpenCLI 作为插件本地 npm 依赖打包,对外暴露 browser 服务与一组交互式浏览器工具。其他插件通过 inject: ['browser'] 注入该服务,即可复用同一运行时,不再依赖全局 CLI。

这是什么

@anweat/dsh-browser 是维护者 anweat 发布的 DSH 联网工具插件,当前 npm 版本为 0.1.9,许可证 MIT。它在 apply() 中通过 ctx.provide('browser', service) 注册浏览器服务,供模型直接调用工具,也供其他插件消费。

一句话定位:自包含的浏览器运行时插件——本地优先打包 Playwright / 可选 Patchright 驱动与 OpenCLI,缺省时回退全局复用,Chromium 内核则共享系统缓存(约 400MB,位于 %LOCALAPPDATA%\ms-playwright)。

核心功能

浏览器服务与工具集

插件最多暴露 21 个工具,覆盖页面打开、交互、截图、脚本执行、有限爬取与 OpenCLI 调用等场景。常用入口包括:

工具 作用
browser_open 打开 URL,返回标题、可读文本与全页截图路径
browser_read / browser_screenshot 读取当前页或截图,适合公开页面
browser_click / browser_type / browser_scroll 点击、输入、滚动,处理表单与懒加载
browser_recipe_run 声明式多步 Playwright Recipe,最多 25 步
browser_crawl 匿名、有限广度遍历,受 usagePolicy 约束
browser_opencli_run 通用 OpenCLI 网关,适配 Reddit、小红书等平台
browser_status 查看运行时状态、automationMode 与审批策略

安装后建议先调用 browser_status 确认驱动与工具目录是否正常;若 Chromium 缺失,执行一次 browser_install 即可补全。

自动化自由度

automationMode 控制模型可见工具集合与执行审批,默认 standard:读取类操作直接执行,点击、输入、滚动等写操作走 DSH 原生一次性审批。可选模式包括 read-onlyautonomousunrestricted;模式变更后需重启 DSH profile,工具目录才会按新配置重新注册。

unrestricted 会取消人工确认,但不会取消 usagePolicy 的并发、突发、页数、深度、重试与冷却保护,仅适合隔离测试 profile。

可复用自动化资产(实验性)

0.1.9 起支持受治理的 Recipe / UserScript 草稿:默认 persistenceMode: suggest 仅记录脱敏语义步骤,候选达到阈值后可在面板总结为草稿;须通过真实浏览器回放后才能手工激活。模型可通过 browser_automation_searchbrowser_automation_developbrowser_automation_run 检索、开发与调用已激活资产。该能力仍标记为 Experimental,建议在隔离 profile 中试用。

与其他插件的协作

dsh-web-search-pro 通过 inject: ['browser'] 注入本插件的 browser 服务,驱动其浏览器与 OpenCLI 后端。README 注明:dsh-web-search-pro >= 0.1.8 需要 @anweat/dsh-browser >= 0.1.8;Web Search Pro 与浏览器插件应同步升级,不要只升级前者。

安装与启用

下面介绍官方安装命令。插件适配 DSH 基线 ^0.1.1-rc.2,要求 Node ^22.19 || >=24

dsh plugin --profile web add @anweat/dsh-browser

也可从本地目录或 tarball 安装:

dsh plugin --profile web add ./dsh-browser

web profile 关闭了 HMR,安装后需完整重启:

dsh --profile web

从旧版本升级时,建议同步升级浏览器插件与 Web Search Pro:

dsh plugin --profile web add @anweat/dsh-browser@^0.1.9 dsh-web-search-pro@^0.1.11

升级后完整停止并重启 Web profile,再调用 browser_statusbrowser_opencli_statusweb_backend_status 验证;仅刷新网页不会重新加载插件服务。

典型用法

公开页面读取

适合不需要登录态的任务。先查状态,再打开目标页:

先调用 browser_status;然后用 browser_open 打开目标页。
读取内容用 browser_read,需要截图时用 browser_screenshot。

需要登录的站点

使用 authProfile 管理登录态,必须配置 allowedDomains;不要把 Cookie 放进工具参数。示例会话提示:

先调用 browser_status;然后用 browser_open 打开目标页。
若页面需要登录,使用 authProfile=forum;不要把 Cookie 放进工具参数。

按场景选择工具

情形 推荐方式
公开网页读取、截图 browser_openbrowser_read / browser_screenshot
表单、分页、懒加载 browser_click / browser_type / browser_scroll
登录后站点 authProfile + allowedDomains
模型生成的多步操作 browser_recipe_run
Reddit / 小红书等 OpenCLI 平台 browser_opencli_statusbrowser_opencli_catalogbrowser_opencli_run
普通站点兼容性不佳 配置 browserRuntime: patchright(Chromium-only)

供其他插件消费 browser 服务

其他插件声明 inject: ['browser'] 后即可获取 BrowserService

export const inject = ['tools', 'browser']
export function apply(ctx: Context) {
  const browser = ctx.get('browser') as BrowserService
  // browser.render / snapshot / searchResults / opencli / recipe /
  // runBuiltinScript / runUserscript / open / click / type / scroll / read / screenshot / close
}

服务接口定义见仓库 src/browser-service.ts

适用场景与注意

适合谁: 在 DSH web profile 中需要稳定浏览器后端、希望联网插件共用 Playwright 与 OpenCLI 的开发者;与 dsh-web-search-pro 搭配做搜索、页面读取与平台适配的场景。

使用注意:

  1. 插件以当前 DSH 进程权限运行,安装前应检查源码与 MIT 许可证。
  2. usagePolicy 限制并发、突发、重试与爬取预算,所有 automationMode 共用同一 Governor,无法通过切换模式绕过。
  3. 泛爬取默认匿名 context,不继承全局登录态;登录后读取应使用显式限域的单页或 Recipe 工具。
  4. 可复用自动化资产仍为实验性功能,草稿须真实回放后才能激活,不宜作为无人监管的生产写操作入口。
  5. 若 harness 为本地源码 checkout,版本号可能与 npm 发布包有出入,可用 dsh plugin --profile web add ./<path> 并在 profile 的 pnpm-workspace.yaml 里对齐版本后重装。

结尾

@anweat/dsh-browser 把 Playwright、可选 Patchright 与 OpenCLI 收进插件边界,用 browser 服务统一对外暴露,让 DSH 联网任务不再绑死全局 CLI。日常从 standard 模式与 browser_status 起步,按任务选用对应工具即可。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜