前言¶
在 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-only、autonomous 与 unrestricted;模式变更后需重启 DSH profile,工具目录才会按新配置重新注册。
unrestricted 会取消人工确认,但不会取消 usagePolicy 的并发、突发、页数、深度、重试与冷却保护,仅适合隔离测试 profile。
可复用自动化资产(实验性)¶
0.1.9 起支持受治理的 Recipe / UserScript 草稿:默认 persistenceMode: suggest 仅记录脱敏语义步骤,候选达到阈值后可在面板总结为草稿;须通过真实浏览器回放后才能手工激活。模型可通过 browser_automation_search、browser_automation_develop、browser_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_status、browser_opencli_status 和 web_backend_status 验证;仅刷新网页不会重新加载插件服务。
典型用法¶
公开页面读取¶
适合不需要登录态的任务。先查状态,再打开目标页:
先调用 browser_status;然后用 browser_open 打开目标页。
读取内容用 browser_read,需要截图时用 browser_screenshot。
需要登录的站点¶
使用 authProfile 管理登录态,必须配置 allowedDomains;不要把 Cookie 放进工具参数。示例会话提示:
先调用 browser_status;然后用 browser_open 打开目标页。
若页面需要登录,使用 authProfile=forum;不要把 Cookie 放进工具参数。
按场景选择工具¶
| 情形 | 推荐方式 |
|---|---|
| 公开网页读取、截图 | browser_open → browser_read / browser_screenshot |
| 表单、分页、懒加载 | browser_click / browser_type / browser_scroll |
| 登录后站点 | authProfile + allowedDomains |
| 模型生成的多步操作 | browser_recipe_run |
| Reddit / 小红书等 OpenCLI 平台 | browser_opencli_status → browser_opencli_catalog → browser_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 搭配做搜索、页面读取与平台适配的场景。
使用注意:
- 插件以当前 DSH 进程权限运行,安装前应检查源码与 MIT 许可证。
usagePolicy限制并发、突发、重试与爬取预算,所有 automationMode 共用同一 Governor,无法通过切换模式绕过。- 泛爬取默认匿名 context,不继承全局登录态;登录后读取应使用显式限域的单页或 Recipe 工具。
- 可复用自动化资产仍为实验性功能,草稿须真实回放后才能激活,不宜作为无人监管的生产写操作入口。
- 若 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 起步,按任务选用对应工具即可。