dsh-plugin-browserskill
Tencent/BrowserSkillBrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
English | 中文
一个 Chrome 扩展:右侧边栏嵌入完整的 dsh 网页界面(会话、设置、审批、 任务、目标、工作区……全部功能),并让 dsh 智能体感知和操作你的浏览器:
http(s) 标签页会被自动注入。browser_start_capture),通过 Chrome DevTools 协议记录活动标签页的请求
方法、URL、状态码、请求体与响应体,browser_capture_requests 读取。默认对
疑似凭据的值做脱敏,见 安全。browser_navigate / browser_click / browser_open_tab。browser_navigate / browser_click / browser_open_tab 的词是
打开 / 跳转 / 前往 / 点击 / 导航 / 访问 / 浏览一下 / 新标签
(英文 open、navigate、click、visit、tab,以及后面跟着页面或 URL 的
“go to”——go to github.com 可以,光说 go to the next step 不行);解锁
browser_start_capture 的词是 抓包 / 抓一下 / 抓取请求 / 监听网络 /
网络请求 / 流量(英文 capture、debug)。
注意:单独说「抓取」不会开启抓包——它是普通的“读取”意图,请改说
「抓包」或「抓取请求」。动作被拦下时会返回一句拒绝语,并列出能解锁该
工具的确切词,照着重说一遍即可。
网页里藏一句指令无法驱动浏览器(免审批模式下的尽力防护,非绝对保证)。dsh web(默认 http://127.0.0.1:3080,可在扩展设置里改)。InjectionResult.error)。分两部分:宿主插件(装进 dsh)与 Chrome 扩展(开发者模式加载)。
1. 把宿主插件加到 dsh web 配置:
dsh plugin --profile web add dsh-chrome
它会注册桥接、浏览器工具、页面注入器三个插件。dsh 会实时热应用新增插件行, 装完刷新浏览器页面即可,无需重启(仅当以后修改已加载插件文件内容时才需 重启一次)。
2. 安装并加载 Chrome 扩展:
npx dsh-chrome install
它会把扩展复制到一个稳定的用户目录(并打印路径),然后提示剩余步骤:
chrome://extensions,开启开发者模式。升级 npm 包后要重新运行 npx dsh-chrome install,再到 chrome://extensions
点一次“重新加载”——安装是复制文件,少做任何一步,Chrome 都还在用旧版扩展
配新版宿主插件。npx dsh-chrome path 打印目录。
要彻底移除 dsh-chrome,两半都要撤:npx dsh-chrome uninstall 删除扩展目录
(再到 chrome://extensions 里移除),dsh plugin --profile web remove dsh-chrome
卸掉宿主插件。
仅限本机可信使用。 桥接与浏览器工具让本机的 dsh 智能体能够读取页面、 抓取流量、驱动浏览器。
browser_capture_requests 不设意图
门槛,因此连着同一个浏览器的任何会话都能读到。只有开启抓包才需要你
明确指示。不抓取 HTTP 头(因此 Cookie / Set-Cookie / Authorization 头
不会进入模型上下文)。其余可能
含凭据的位置——URL 里疑似密钥的查询参数(?access_token=…)、请求体
(表单/JSON 登录)、以及响应体里嵌入的令牌——默认脱敏为 «redacted»。
若要抓取原始未脱敏流量(自行调试用),在配置文件 cordis.patch.yml 的
dsh-chrome-browser-tools 行上设 redactCredentials: false。
npx dsh-chrome install),认不出的字段会被丢弃
而不是原样透传,整个应答认不出来则直接报错。| 路径 | 内容 |
|---|---|
extension/ | Chrome MV3 扩展(侧栏 + service worker + 设置页) |
host/ | dsh 侧三个插件:bridge.js(WS 桥接)/ browser-tools.js(工具 + 脱敏)/ page-injector.js |
host/redact.js | 抓包流量的凭据脱敏 |
host/intent-gate.js | 意图解锁关键词与本轮用户文本提取(与 tools/verify-intent.cjs 共用) |
cordis.patch.yml | 挂载三个宿主插件的 bundle 补丁 |
bin/cli.js | 安装扩展文件的 dsh-chrome 命令 |
docs/bridge-protocol.md | 扩展与 dsh 桥接的线上协议 |
tools/ | 针对 dsh 会话日志的开发期诊断脚本(verify-intent.cjs、dump-session.cjs,共用 session-log.cjs),不随 npm 包发布 |
browser_list_tabs 与 browser_open_tab 按其性质除外。browser_get_page 是另一套更小的限额:
约 40,000 字符正文、最多 400 条链接。history.pushState
与 replaceState),防抖约 2 秒;滚动不触发。只有活动标签页的导航算数
——后台标签页一直切 SPA 路由不会产生任何推送。此外桥接每次重连成功后会
补推一次当前页面。browser_click 绝不重试:若这次点击的结果丢失了(页面导航走了,或注入/
CDP 调用被中断),工具会如实说明“无法确认这次点击是否生效”,而不是再点
一次(点击不是幂等操作),并提示智能体用 browser_get_page 复核页面状态。chrome-extension://(例如其它
扩展的设置页)、chrome://、file:// 以及 Chrome 应用商店。worker 在尝试
之前就按标签页 URL 判定,把这类页面直接交给浏览器的远程调试协议
(http://127.0.0.1:9222)。这要求浏览器以 --remote-debugging-port=9222
启动(若远程端点做 Origin 校验,还需
--remote-allow-origins=chrome-extension://<本扩展ID>)。当 CDP 端点缺失或
不可达时,读取这类页面会直接报错并指明该启动参数,而不是悄悄返回空。
普通 http(s) 页面永远不会走这条路径(哪怕注入失败也不会),自动注入的
“当前页面”同样只覆盖普通 http(s) 标签页(应用商店同在排除之列)。MIT © Stuart Hu