dsh-live-browser:让 Agent 操作 DSH 侧边栏内置浏览器

前言

DeepSeek Harness(DSH)右侧栏自带 @deepseek-ai/dsh-client-ui-sidebar-browser:用 Electron <webview> 渲染真实网页,带地址栏、历史与独立会话。官方能力主要停在导航——Agent 能打开页面,却无法在用户眼前那张页面上点击、输入、读取正文或滚动。

若直接改 DSH 官方 bundle,每次升级都要重打补丁,还可能影响侧边栏链接等行为。社区插件 dsh-live-browser(维护者 c347087870,分类:客户端)在不修改 DSH 任何文件的前提下,向官方侧边栏浏览器挂载的 guest 文档注入操作接口,并向模型注册 25 个 browser_* 工具,操作的正是当前 Session 侧边栏里用户正在看的那一页。

这是什么

dsh-live-browser 是 DSH 服务端插件(package.json 中 dsh.kind 为 server,客户端 bundle 平台为 web)。当前仓库版本 0.3.0,许可证 MIT,依赖 Node.js ≥20,面向 DSH 0.2.x。

一句话:真实 webview 渲染 + 注入命令层,让 Agent 对侧边栏浏览器做快照、交互、导航与有限导出,且按「一个对话一个浏览器」绑定 Session,避免命令跑到别的对话面板。

核心功能

与官方侧边栏浏览器的关系

插件不替换官方组件,而是找到 webview[data-sidebar-browser-frame="webview"],向每个 guest 注入 lib/agent-script.js(纯 DOM:快照带稳定 ref、点击、输入、按键、选择、悬停、滚动、读正文、等待、文件附加、canvas/SVG 转 PNG 等),并通过桥接把宿主侧工具调用排到客户端执行。

25 个 browser_* 工具(摘要)

类别 工具
状态与面板 browser_status、browser_open_panel
导航 browser_navigate、browser_back、browser_forward、browser_reload
读页 browser_snapshot、browser_read_text
交互 browser_click、browser_type、browser_press、browser_select、browser_hover
滚动与等待 browser_scroll、browser_wait
脚本 browser_eval(受 allowEval 控制)
导出 browser_screenshot(canvas/SVG/元素栅格化,非原生窗口截屏)
标签页 browser_tabs、browser_tab_new(无 tab 参数指定其他标签;焦点 guest 或最新 guest)
文件 browser_upload、browser_downloads
确认 browser_confirm(敏感动作,配合 confirmSensitive)

自动打开侧边栏浏览器

Agent 不会要求用户先手动开浏览器,也不会开系统外部窗口。命令进入队列后,客户端 bundle 持续轮询;若当前 Session 没有浏览器页面,会调用 openTabIn(sessionId, 'browser', …) 在发起请求的对话里打开标签页,guest 就绪后再执行。冷启动时一句 browser_navigate 即可在右侧栏弹出标签并加载 URL。

与「改官方 bundle」的对比(README 归纳)

本插件 直接改官方 bundle
点击 / 输入 / 读取 / 滚动 可以 可以
页面图表导出 PNG 可以(页面 canvas/SVG) 可以
截原生窗口 不行 可以
DSH 升级 可继续使用 需逐版重补丁
对现有功能风险 无 可能破坏侧边栏链接等

已知限制(结构化失败,不假装成功)

  • browser_tab_close / browser_tab_activate:侧边栏标签 id 内部不可控,需用户手动点标签。
  • browser_reset_profile:无会话清理 API,工具返回操作说明。
  • 原生窗口像素:browser_screenshot 走 DOM 层栅格化,适合图表类内容。

安装与启用

需要 DSH 0.2.x 与 Node.js 20 以上。插件在 package.json 里声明了 DSH 组合包,安装时 DSH 会自动注册。

从 GitHub 安装(Web / CLI profile)

dsh plugin --profile web install c347087870/dsh-live-browser

桌面版 profile 由 Electron 应用独占:在界面 插件 → 添加插件,粘贴 https://github.com/c347087870/dsh-live-browser,然后重启 DSH。

从 npm 安装

dsh plugin --profile web install dsh-live-browser

确认安装

node -e "const p=require('./node_modules/dsh-live-browser/package.json');console.log(p.version, p.dsh)"

dsh.bundle.patch 与 lib/index.js 必须存在。重启后日志应出现:

[dsh-live-browser] loaded: 25 tools, driving the DSH sidebar browser

若 /dsh-live-browser 路由返回 HTTP 405,通常表示插件未加载(需重启;宿主工具仅在进程启动时注册)。

本地开发不要用目录 junction(mklink /J、ln -s):Node 解析真实路径会导致 schemastery 去源码目录而非 profile。应复制整个包目录,或用 dsh plugin 安装。

配置项

DSH 会在插件设置卡片中渲染下列项,均有默认值,不修改也可使用。

配置 默认 含义
confirmSensitive true 标记为 sensitive 的动作执行前先问用户
allowEval true 是否允许 browser_eval 在页面执行任意 JavaScript
autoOpenPanel true 有命令但无页面时自动打开侧边栏浏览器
commandTimeoutMs 30000 单次命令等待面板执行的超时(毫秒)
openPanelWaitMs 8000 打开面板后等待就绪的时间
maxSnapshotNodes 400 browser_snapshot 默认节点上限
maxTextChars 12000 browser_read_text 默认字符上限
waitTimeoutMs 10000 browser_wait 默认超时(毫秒)
uploadMaxBytes 16777216 browser_upload 单文件上限
imageDir 空 截图目录;空则 ~/.dsh/storages/dsh-live-browser/images
downloadsDir 空 下载列表目录;空则系统「下载」文件夹

只读页面、禁止在页内跑代码时,将 allowEval 设为 false:browser_eval 会返回 executed: false,并提示改用 browser_snapshot / browser_read_text。

典型用法

下面介绍一种可复现的冷启动流程(与 README「浏览器会自己打开」一致)。

  1. 安装插件并重启 DSH,确认日志中出现 25 个工具加载信息。
  2. 在某一 Session 中让 Agent 调用 browser_navigate,传入目标 URL;若无打开页面,右侧栏会自动出现浏览器标签并加载。
  3. 用 browser_snapshot 获取带 ref 的节点列表,再用 browser_click、browser_type 等按 ref 或选择器交互。
  4. 需要正文时用 browser_read_text;需要等待元素或延迟时用 browser_wait。
  5. 图表类页面导出 PNG 时用 browser_screenshot(依赖页面 canvas/SVG,不是整窗截屏)。

开发与维护侧可用本地页面做实机验证(README 开发脚本):

node scripts/verify-in-browser.mjs --serve

再用 browser_* 工具驱动 DSH 侧边栏内置浏览器;该脚本属于仓库 scripts/,不在发布产物 files 列表内,需从 GitHub 源码树获取。

工作原理(简述)

工具调用经 lib/bridge.js 入队,客户端 client.js 长轮询:无 guest 则开侧边栏浏览器;页面命令注入 guest 脚本;浏览器命令操作 guest 元素(如 loadURL);标签页命令走侧边栏服务。结果经 settle 回到工具层。面板 HTTP 走 lib/rpc.js 注册的 /dsh-live-browser 前缀路由,请求校验同源与回环主机。

安全与权限

插件以当前 DSH 进程权限 运行,能读写与你本机用户相同的文件范围(路由虽拒跨站与非回环调用方,本机进程仍可伪造相关头)。安装前应阅读仓库源码与 MIT 许可证,并理解:

  • browser_eval 可在当前加载的任意页面执行 JavaScript,这是工具设计目的,也是 allowEval 存在的原因。
  • confirmSensitive 开启时,敏感动作需用户确认;无确认通道时拒绝而非放行。

适用场景与注意

适合:需要在 DSH 窗口内完成「看同一页网页 + Agent 自动化」的开发者;希望随 DSH 升级而少改动的侧边栏浏览器自动化;表单填写、读页、站内图表导出等 DOM 层任务。

不适合或需知:依赖关闭/切换指定标签页 API、清理浏览器 profile、或整窗像素截屏的场景;对 browser_eval 有严格禁用时需关闭 allowEval 并改用快照与读文本。

安装注意:package.json 等文件若带 UTF-8 BOM,DSH 可能拒绝安装并报 JSON 解析错误;仓库提供 npm run strip-bom 供维护者使用。改插件源码后必须重启 DSH,工具与路由不会热加载。

结尾

dsh-live-browser 补上了 DSH 官方侧边栏浏览器在 Agent 侧的交互缺口:不改 DSH 本体、按 Session 驱动用户眼前的 webview,并提供可配置的安全边界。插件托管于 GitHub,社区目录页可检索安装说明与元数据。

  • 目录页:https://www.skillhub.cn/plugins/c347087870/dsh-live-browser
  • GitHub:https://github.com/c347087870/dsh-live-browser
羽毛球分组比赛记分
小程序二维码

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

Xiaoye