dsh-plugin-browserskill
Tencent/BrowserSkillBrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
DeepSeek Harness 浏览器可视化插件:为每个会话打开一个真实可见的 Chrome 窗口,Agent 通过
chrome_*工具集操作浏览器,你在 Web GUI 的「Chrome」标签页里实时观看画面流,随时可以手动接管。
chrome_open / chrome_status / chrome_close / chrome_navigate / chrome_tabs / chrome_snapshot / chrome_screenshot / chrome_click / chrome_click_at / chrome_fill / chrome_type / chrome_press_key / chrome_hover / chrome_scroll / chrome_evaluate / chrome_wait。其中 chrome_tabs 支持 list / new / close / select;快照、截图与点击始终作用于「当前选中」的标签页。chrome_snapshot 输出紧凑的 a11y 树 + 稳定元素 uid,点击/填充直接按 uid 定位,比裸 DOM 省 token、抗脆弱选择器。chrome_screenshot 的图片既进模型上下文(图片块),也保存到会话截图目录并展示在面板里;历史记录带标题/URL/尺寸元数据,重启后仍在。(会话用纯文本模型?请看常见问题。)chrome_close 显式关闭,插件卸载/宿主退出时全部收尾。前置:已安装 DeepSeek Harness(DSH),本机装有 Chrome 或 Edge。
# 方式一:从 GitHub 安装(推荐)
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:jiaererw/dsh-plugin-chrome
# 方式二:本地路径(开发调试)
npx -p @deepseek-ai/dsh dsh plugin --profile web add D:/harness/dsh-plugin-chrome
安装后重启 DSH,Web GUI 的会话顶部会出现「Chrome」标签页。
若你的 profile 的
cordis.patch.yml里还留着早期本地开发时手动挂载的dsh-plugin-chrome行,请先删掉再走 CLI 安装,避免双挂载(两个 host 半、两个 Chrome 管理器)。
安装后 Agent 自动获得 chrome_* 工具集。直接对 Agent 说:
打开 Chrome,访问 https://example.com,截个图,然后点页面里的「登录」按钮并填写用户名。
Agent 会:chrome_open → chrome_navigate → chrome_screenshot(看图)→ chrome_snapshot(拿 uid)→ chrome_click / chrome_fill。
chrome_screenshot 的产物都在「截图历史」里,点击缩略图放大。chrome_* 工具(或点击面板「打开窗口」)时才拉起 Chrome。DevToolsActivePort 自动连接并接管该窗口(借鉴 chrome-devtools-mcp 的 autoConnect 机制),而不是报错。idleTimeoutMs(默认 10 分钟)自动关闭;有 Web UI 观看实时画面时不回收。在 profile 的 cordis.patch.yml 中覆盖插件行配置(整段 config 替换):
- id: dsh-plugin-chrome
config:
headless: false # 保持 false:可见窗口是本插件的核心
executablePath: '' # 留空自动探测 Chrome/Edge;也可指定绝对路径
idleTimeoutMs: 600000 # 空闲自动关闭(0=禁用)
windowWidth: 1280
windowHeight: 900
screencastFrameSkip: 4 # 实时画面抽帧(1=最流畅)
screencastQuality: 70 # JPEG 质量 1-100
maxSnapshotText: 60000 # 单次快照最大字符数
maxTabs: 16
extraArgs: '' # 追加的 Chrome 启动参数
数据目录(浏览器配置与截图):~/.dsh/data/dsh-plugin-chrome/sessions/<sessionId>/(可用 dataRoot 覆盖)。
chrome_snapshot。chrome_* 工具调用或点击「打开窗口」即可重启。chrome_screenshot 会把图片作为图片块写入会话历史。如果当前会话的模型不支持图片输入,之后每一轮请求都会以 UNSUPPORTED_CONTENT: does not accept image input 被整体拒绝,会话不再响应,重试无效。请给会截图的会话使用支持视觉的模型,或避免在其中调用 chrome_screenshot。pnpm-workspace.yaml 的 allowBuilds 中加入 dsh-plugin-chrome: true 后重试安装。npm install
npm run typecheck # host + client 两个 program
npm test # vitest 单测
npm run test:e2e # 真实 Chrome 端到端冒烟(会弹出可见窗口)
npm run build # lib/index.js + lib/index.d.ts(host)、lib/client.js + lib/client.d.ts(client bundle)
npm run watch # 开发时持续构建;client 变更经 HMR 热更,host 变更需重启 DSH
架构:host 半(cordis 插件)用 puppeteer-core 驱动本机 Chrome,注册 chrome_* 工具与 /dsh-chrome/* HTTP/WS API;client 半(浏览器 bundle)注册 conversation.view 的「Chrome」标签页,消费 API 与帧流。画面流 = Chrome 原生 screencast(活动页)+ 截图心跳(静止页兜底)。控制层借鉴 chrome-devtools-mcp(CDP 控制、a11y 快照+uid 反查、等待机制、autoConnect 接管)与 mcp-chrome(截图压缩、CDP 坐标输入、会话引用计数)的成熟设计。
MIT