前言¶
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. 安裝瀏覽器擴展¶
- 打開
chrome://extensions(Edge 爲edge://extensions),開啓「開發者模式」。 - 點「加載已解壓的擴展程序」,選擇本包的
extension/目錄。側欄面板裏可以一鍵複製該路徑。 - 點擴展圖標,確認顯示 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