yelinos/dsh-chrome-bridge:让 DSH Agent 操作你已登录的 Chromium

前言

DSH 的 Agent 要读一个内部系统、填一张表单、确认一个下单动作,通常有两条路:要么给它一个干净的 Playwright 浏览器,但它没有你浏览器里的登录态,遇到验证码和二次确认就卡住;要么让它自己猜页面步骤,容易点错、读错。这个插件走第三条路:在你日常使用的 Chrome / Edge 里装一个扩展做桥,Agent 通过它在专用标签组里操作你真实、已登录的浏览器,第一次接触某个域名时先问你要权限。

下面介绍 yelinos 维护的 dsh-chrome-bridge。它思路对齐 OpenAI Codex 的 Chrome 扩展,定位是 DSH 的浏览器控制插件,MIT 许可,当前版本 0.1.1,目录页标注星标为 0。

整体思路

插件分两部分,通过本机 WebSocket 通信:

DSH Host 进程                         你的 Chrome / Edge
chrome-bridge (service)              DSH Chrome Bridge (MV3)
 · WebSocket 服务器                   · service worker
 · 命令/超时/keepalive                · chrome.tabs/tabGroups
 · status() Remote 接口   ws://127.0.0.1:8765
chrome-bridge-tools      DSH Web UI    · chrome.debugger (CDP)
 · chrome_* 工具                      · popup:状态/端口/token
 · 按域名授权 / 会话标签组                    右侧栏「Chrome 桥接」面板
 · 截图 → 附件管线
client.js
 · 侧栏状态卡/安装引导

扩展侧是 Manifest V3,只用 chrome.* API,不打包第三方运行时,零依赖;Host 半身是普通 ESM,纯插件挂载,没有构建步骤。

三个设计约束值得注意:

  • 扩展只主动连 ws://127.0.0.1,不监听端口,网页无法访问它。
  • 服务默认只绑回环地址;同机任意进程仍可连该端口,介意者建议设 authToken。
  • chrome.debugger 附加时浏览器会显示「正在调试此浏览器」提示条,这是读写页面所必需的。

核心能力

按 README 的功能表,能力分这么几组。

真实浏览器操作。打开 / 导航标签页、读页面文本、执行 JS、截图。鼠标键盘走 CDP Input 域,是真实输入而不是合成事件,选择器或坐标点击都支持,含双击和右键。

按域名授权。首次接触域名弹出「本次会话允许 / 始终允许 / 拒绝」;「始终允许」经 settings 服务写入 allowedDomains 并持久化。门禁在导航和页面交互(读 / 执行 / 点击 / 输入 / 截图)前都会执行,blockedDomains 永远拒绝。

会话级标签组。每个 Agent 会话独立一个 DSH · <会话标识> 标签组,多会话并行互不干扰;组名默认取首个页面标题,Agent 可用 chrome_group 改成简短目的名。标签页默认复用当前会话页,每会话最多保留 maxSessionTabs 个,超出按 LRU 自动关闭,空闲超时与会话结束时自动清理。

读页方式有两种。chrome_snapshot 返回带层级、可见状态和稳定 e1 引用的无障碍树,默认输出增量 diff;chrome_read_page / chrome_read_urls 直接读可见文本或 HTML。

此外还有虚拟光标(读页时显示,回合结束收起)、滚动、截图直回对话(PNG 经附件管线作为图像内容块给模型,无附件服务时落盘)、以及右侧栏的连接状态 / 安装引导 / 域名名单面板。

安装

先装 DSH 插件,再装浏览器扩展。

1. 安装 DSH 插件

在 DSH 会话里让 Agent 执行 plugin_manager 的 install_bundle,目标为本目录的绝对路径;或在终端:

dsh plugin --profile web add /absolute/path/to/dsh-chrome-bridge

这会挂载两个 Host 级行:chrome-bridge(桥接服务,WebSocket 服务器)和 chrome-bridge-tools(chrome_* 工具)。装好后要刷新一次 Web 页面,右侧栏「+」菜单里才会出现「Chrome 桥接」标签页。

2. 安装浏览器扩展

  1. 打开 chrome://extensions(Edge 为 edge://extensions),开启「开发者模式」。
  2. 点「加载已解压的扩展程序」,选择本包的 extension/ 目录。侧栏面板里可以一键复制该路径。
  3. 点扩展图标,确认显示 Connected to DSH(端口默认 8765,需与服务端一致)。

3. 验证

让 Agent 调用 chrome_status,应看到类似输出:

DSH Chrome Bridge connected:
- listening: true
- endpoint: ws://127.0.0.1:8765
- extension: DSH Chrome Bridge 0.1.1
- extension directory: /path/to/dsh-chrome-bridge/extension/

README 提到 0.1.1 需要在扩展管理页重新加载,并重新挂载 DSH 插件;扩展增加了 HTTP/HTTPS 网站访问权限,用于隔离光标脚本及已有标签页注入。

工具面

chrome_* 工具不少,按用途归类如下(节选 README 工具表的一部分)。

页面读取与执行:chrome_navigate(默认复用当前会话标签页,newTab: true 才新开)、chrome_read_page、chrome_read_urls、chrome_eval、chrome_snapshot、chrome_scroll、chrome_find。

真实输入:chrome_click、chrome_type、chrome_key、chrome_move、chrome_screenshot、chrome_element_info / chrome_element_screenshot。

会话与标签组管理:chrome_tabs、chrome_active_tab、chrome_group、chrome_open_tabs / chrome_claim_tab / chrome_release_tab、chrome_mark_tab、chrome_close_tab(只关 Agent 标签组内的页)。

长尾能力包括 chrome_act(一次调用批量执行多个动作,减少往返)、chrome_locator(Playwright 风格定位器)、chrome_upload / chrome_download、chrome_clipboard / chrome_dialog、chrome_logs、chrome_export / chrome_export_gsuite / chrome_export_youtube_transcript、chrome_viewport / chrome_visibility / chrome_cdp / chrome_network、chrome_user_takeover(暂停自动化请用户接管登录 / CAPTCHA / 2FA)、chrome_js(持久 JS 浏览器会话,暴露 agent.browsers / browser.tabs / tab.playwright / tab.ax / tab.cua 等)、chrome_webmcp、chrome_history / chrome_bookmarks 等。

工具全表以 README 为准。

配置

配置分服务行和工具行两处,编辑 profile 的 cordis.patch.yml,按 id 覆盖对应行的 config。

chrome-bridge(服务行):

字段 默认 说明
host 127.0.0.1 绑定地址
port 8765 端口
authToken "" 非空时扩展 popup 里需填相同 token
commandTimeoutMs 20000 单条命令超时

chrome-bridge-tools(工具行):

字段 默认 说明
tabGroupTitle DSH Agent 标签组标题前缀
askForNewDomains true 遇到新域名先问用户
allowedDomains [] 始终允许的域名;可被「始终允许」写入并持久化
blockedDomains [] 拒绝的域名
maxSnapshotChars 24000 页面文本截断长度
maxSessionTabs 3 每会话最多保留的 Agent 标签页
autoCloseIdleMs 180000 标签页空闲多久后自动关闭(0 关闭空闲清理)
autoCloseOnSessionEnd true Agent 会话结束时关闭其打开的所有标签页

不想改文件的话,直接在对话里选「始终允许」,由 settings 服务写入 allowedDomains。

典型用法

一次常规操作大致是:先 chrome_status 确认桥接和扩展在线,再用 chrome_navigate 打开目标页面(默认复用当前会话页),接着 chrome_snapshot 拿带稳定 ref 的页面树,然后 chrome_act 一次调用里连续执行点击、输入、滚动或截图并拿回每步观察,最后需要交付或交接时用 chrome_mark_tab 标记标签页,避免被自动清理回收。

如果页面要人机验证,调用 chrome_user_takeover 暂停自动化交给用户,而不是让 Agent 反复撞。

需要一次性批量读多个 URL 时用 chrome_read_urls(在临时后台标签中读取);需要原始调试能力时用 chrome_cdp。

适用场景与注意

适合这类开发者:已经在 Chrome / Edge 里登录好要操作的系统(内部工单、文档、控制台),希望 Agent 在保留登录态的前提下点页面、填表单、看截图,同时不想让 Agent 的自由度扩散到整个浏览器。

几点需要留意:

  • 依赖浏览器扩展与 chrome.debugger,仅支持 Chromium 系(Chrome / Edge / Chromium)。
  • 标签组按会话拆分,同一会话内所有标签共用一个组。
  • 若附件服务不可用(精简组合),截图回退为工作区文件 + read_image。
  • README 明确这是实验性插件,协议为包内私有 v1,可能随版本调整。
  • 插件以当前 dsh 进程权限运行,会挂载两个 Host 级行;安装前建议先读一遍源码和 MIT 许可,再决定是否加载扩展。

目录页是独立的社区站点 SkillHub,与 DeepSeek / 幻方无官方从属关系,不是官方应用商店。

小结

dsh-chrome-bridge 的价值在于把「Agent 操作浏览器」这件事从干净沙箱拉回到你正在用的浏览器上,用域名授权和会话标签组把不可控的自动化约束在可审计的边界内。如果你的 DSH 工作流里反复需要在一个已登录的 Web 系统上执行操作,值得装一遍试;如果是需要批量无头抓取的场景,它并不合适。

目录页:https://www.skillhub.cn/plugins/yelinos/dsh-chrome-bridge
源码与 README:https://github.com/yelinos/dsh-chrome-bridge

羽毛球分组比赛记分
小程序二维码

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

小夜