dsh-browser:在 DSH 側邊欄裏跑真實 Chromium,人機可交替操作

前言

在 DeepSeek Harness(DSH)裏讓智能體「上網」,常見做法要麼是抽象 HTTP 抓取,要麼用無頭瀏覽器但無法處理登錄、驗證碼和二次驗證。許多站點還會在 iframe 裏被 X-Frame-Options 擋住,登錄態也難在人和 Agent 之間交接。

@noext34/dsh-browser(倉庫 Noext/dsh-browser)把一臺真實的 Chromium 嵌在 DSH 右側邊欄:Agent 通過工具驅動頁面,遇到需要人工的步驟時你可以接管同一瀏覽器、同一配置與 Cookie,完成後再交回。維護者爲 Noext,在 SkillHub 社區目錄中歸類爲聯網工具。

這是什麼

一句話:dsh-browser 在 Host 上啓動 Chromium,用 Chrome DevTools Protocol(CDP)把畫面以 JPEG 串流推到側邊欄畫布,輸入從側邊欄回傳到頁面;Agent 與人共用同一會話、同一 Profile。

與「只在模型裏描述網頁」不同,密碼直接進 Chromium,不進入模型上下文、Session 日誌或截圖(README 中明確說明)。

架構要點

Host 側維護一個 Chromium Session;CDP 使用 Page.startScreencast 輸出幀,輸入走 Input.*。鏡像不是 iframe,而是 WebSocket 上的二進制幀,因此登錄頁不被幀策略攔住,且站點 HTML 不進入 DSH 的 DOM。

每個活躍 Agent 對應一個 Chromium Session,兩個 Session 不共享 Cookie;Session 銷燬時關閉瀏覽器。鏡像按側邊欄 CSS 尺寸做 1:1 視口模擬(至少 360×300),點擊座標與頁面所見一致。

Agent 可用工具

安裝後,Agent 獲得一組 browser_* 工具:

工具 作用
browser_open 打開地址並返回頁面文本
browser_read 讀取當前頁可見文本
browser_click 點擊 CSS 選擇器或座標點
browser_type 輸入文本,可選提交
browser_press 按鍵(Enter、Tab、方向鍵等)
browser_screenshot 捕獲 PNG 持久圖像
browser_navigate 後退、前進、刷新
browser_tabs 列出、切換、新建或關閉標籤
browser_request_human 請求人工接管並等待交回

當人類處於接管狀態時,上述工具會失敗,並提示:a human is controlling the side-panel browser; wait for them to hand it back。

人機交接(handover)

同一租約有三種狀態:idle(無人駕駛)、agent(工具可用)、human(拒絕一切 browser_*,側欄顯示 You are driving)。

  1. 在工具欄點 Take control 接管瀏覽器。
  2. 完成後點 Done — hand back 交回 Agent。
  3. Agent 調用 browser_request_human 時,頁籤會顯示原因橫幅,工具調用阻塞直到你交回、超時或取消。

若長時間無操作,接管會在 humanIdleMs 後自動失效,避免 forgotten 標籤長期鎖住 Agent。

安裝與啓用

插件面向 web profile,npm 包名爲作用域包 @noext34/dsh-browser(npm 上無作用域的 dsh-browser 屬於另一位作者的其他插件)。

當前 package.json 版本爲 0.2.3,要求 Node >=24.9.0、DSH >=0.2.0,許可證 MIT。

按 README 安裝並啓動:

dsh plugin --profile web add @noext34/dsh-browser
dsh --profile web

從 npm 安裝可在 Plugins 頁面使用 Update 按鈕;git 安裝不提供 DSH 內的就地更新。更新命令:

dsh plugin --profile web update @noext34/dsh-browser

新代碼在 Host 重啓後加載;運行中版本可通過 GET /api/dsh-browser/status 或 Host 日誌中的 dsh-browser <version> starting 覈對。

Chromium 可執行文件依次從環境變量 DSH_BROWSER_EXECUTABLE、Playwright 緩存(npx playwright install chromium)、常見系統路徑發現;可用配置項 executablePath 固定路徑。

配置項

默認值與含義見 README;前六項可在 Plugins → Browser 頁面編輯,修改寫入 profile 的 cordis.patch.yml,變更項可 Reset to default。

字段 默認 含義
executablePath 自動發現 Chromium 可執行路徑
headed true 是否在 Host 顯示器上顯示窗口;false 爲無頭,側邊欄鏡像仍可用
persistentProfile true Cookie 與登錄保存在 $DSH_HOME/browser-profiles
width, height 1280, 800 初始視口
quality 62 鏡像 JPEG 質量
maxSessions 2 單 Host 併發瀏覽器數
humanIdleMs 600000 人工接管空閒多久後失效
idleTimeoutMs 300000 無觀衆且無活動時關閉瀏覽器
startUrl about:blank 新瀏覽器打開的地址
chromiumArgs — 額外 Chromium 啓動參數

示例(YAML 片段):

- id: dsh-browser
  config:
    headed: false
    idleTimeoutMs: 120000

典型用法

  1. 啓動帶 web profile 的 DSH 後,打開右側邊欄,選擇 Browser,輸入地址訪問頁面。
  2. 或在對話中讓 Agent 操作,例如:open example.com and tell me what the page says(README 原文示例)。
  3. 需要登錄或驗證碼時,自己接管完成輸入,再交回 Agent 繼續在已認證頁面工作。

適用場景與注意

適合誰:需要在 DSH 工作流裏做真實網頁交互的開發者——查閱需登錄的文檔、填表、多標籤操作,且希望登錄態在人與 Agent 之間無縫傳遞。

安全與權限:瀏覽器擁有獨立於 DSH 沙箱的完整網絡能力;README 要求將 browser_* 視作與 shell 同級權限。Profile 目錄權限爲 0700,可用工具欄 Clear profile 刪除;CDP 綁定隨機本機迴環端口且不對外通告。Host 以 root 運行時 Chromium 使用 --no-sandbox 才能啓動,隔離邊界主要在 Profile 目錄而非渲染器沙箱。

已知限制(README):僅 Chromium;Host 重啓後歷史與未保存表單不保留(persistentProfile 開啓時 Cookie 保留);不支持 Firefox/WebKit;鏡像爲 JPEG,文本清晰度受 quality 影響;模態對話框會自動接受且無法在鏡像中展示。

安裝前請自行閱讀 GitHub 倉庫 源碼與 MIT 許可證;插件在 DSH Host 進程權限下運行,社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-browser 用真實 Chromium、CDP 串流與租約式人機交接,把「Agent 能瀏覽」和「人能登錄」放在同一 Profile 裏解決,而不是在模型上下文裏重演網頁。

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

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

小夜