前言¶
DeepSeek Harness(DSH)的插件生态遵循“一切皆插件”的理念。部分插件将 browser 作为可选依赖,却在 inject 字段中硬声明了它(例如 dsh-accounts)。在 DSH 的启动流程中,如果名为 browser 的服务未激活,这些插件会卡在 pending 状态,导致整个 profile 启动失败。
社区中已有提供 browser 服务的方案(如 dsh-builtin-browser),但该方案自带 Electron,且与正在使用 browser-skill 的用户存在冲突——两者都会注册 browser_session 服务,工具注册表无法处理重名,会导致整组工具失效。
dsh-browser-bsk 是为了解决上述冲突而生。它不提供独立的浏览器引擎,而是将本机 browser-skill 使用的 bsk CLI 封装成 DSH 可注入的 ctx.browser 服务。这意味着它可以与 browser-skill 共存,复用现有的 daemon 会话和登录态。
核心功能¶
本插件仅实现 DSH ctx.browser seam 所需的基础方法,调用这些方法会直接映射为 bsk 命令:
| 方法 | bsk 命令 | 说明 |
|---|---|---|
open(label) |
bsk session start |
启动会话,返回 session id。label 仅用于日志记录,不用于去重。 |
listTabs(session) |
bsk tab list --session S |
返回标签页列表,包含 tabId、url、title、active 等字段。 |
setValue(session, {target, value}, signal) |
bsk fill --session S --selector X --value V |
填充表单值。 |
click(session, {target}, signal) |
bsk click --session S --selector X |
点击元素。 |
key(session, {key}, signal) |
bsk press <KEY> --session S |
模拟按键(如 Enter)。 |
detectChallenge(session, signal) |
bsk get-html --session S |
读取页面 HTML,匹配验证码特征(reCAPTCHA/hCaptcha 等),用于保守判断是否跳过代填。 |
close(session) |
bsk session stop <ID> |
停止会话,支持幂等操作。 |
安装与配置¶
通过 DSH CLI 直接安装:
dsh plugin --profile web add file:/Volumes/Kapp/source/dsh-browser-bsk
安装完成后重启 DSH。如果 dsh-accounts 因缺少 browser 服务而被禁用,现在可以将其启用。在 cordis.patch.yml 中可以配置以下参数以适配环境:
- insert:
- id: browser-bsk
name: dsh-browser-bsk
config:
bskPath: bsk # bsk CLI 可执行文件路径,默认从 PATH 解析
timeoutMs: 120000 # 单次命令超时时间
sessionWidth: 1400 # 可选,会话窗口宽度
sessionHeight: 900 # 可选,会话窗口高度
限制与注意事项¶
- 方法缺失:不提供
navigate、snapshot、execute、screenshot等方法。若消费者调用这些方法,会直接报错。 - 定位方式:仅支持 CSS 选择器定位(
by: 'css')。 - 互斥性:与
dsh-builtin-browser互斥。两者都发布browser服务,同时安装会导致服务重复注册,引发冲突。 - 检测逻辑:
detectChallenge是标记匹配,而非完整的验证码破解能力,仅用于辅助决策是否跳过代填。
结尾¶
如果你正在使用 browser-skill 驱动浏览器,并遇到 dsh-accounts 等插件因缺少 browser 服务而无法启动的问题,dsh-browser-bsk 是一个兼容性良好的解决方案。它通过提供 ctx.browser seam,解决了注入冲突问题,同时保持了与原生 browser-skill 的会话共享能力。