前言¶
在 DSH 裏做網頁抓取、表單操作或文檔預覽時,往往要接一層瀏覽器。內置的 dsh-builtin-browser 走自託管 Electron:沒有二進制、沒有 GUI 庫,或在 seccomp 容器裏常見 No usable sandbox!。Playwright 類方案又容易每個消費方各起一個進程,CDP 端口若對外監聽還會把 cookie 暴露給本機任意進程。
下面介紹社區插件 dsh-browser-service(維護者 lyp88997),用一條 dsh plugin add 把單例 CDP 守護、ctx.browser 的 cdp-daemon provider、完整 browser_* 工具面,以及網頁浮動窗口裝進 web profile,面向無 root、無 GUI 的服務器與容器環境。
這是什麼¶
dsh-browser-service 是 DeepSeek Harness 的聯網工具類插件,npm 包名與插件 id 均爲 dsh-browser-service。一個 tarball 交付:
- 用戶態 chrome-headless-shell 單例 CDP 守護(內核只綁
127.0.0.1,對外經要求 Bearer token 的本機迴環代理暴露/devtools); - 經本包 shim 轉出的 33 個
browser_*工具(工具面來自依賴dsh-builtin-browser,由組合 patch 掛到tool-browser); cdp-daemonbrowser provider,首次用瀏覽器時默認用包內bin/browsersvc.mjs start拉起守護進程;- 網頁面板:左上角可拖動的膠囊入口,內嵌可點、可滾、可打字的實時畫面,以及操作 / 控制台 / 網絡 / 設置;
- 兩份隨包全局技能
browser、browser-runtime(技能中心顯示爲「系統內置」)。
另提供與 dsh-univer-office 兼容的包裝腳本思路:Univer 只認「瀏覽器可執行文件路徑」,可把同一份二進制外的 wrapper 配成 browserExecutablePath(不共享 CDP 守護進程,分析見倉庫 docs/design-notes.md)。
許可證 MIT;運行環境要求 Node >= 22.19(見 package.json engines)。
核心功能¶
單例 CDP 與多會話隔離¶
多個客戶端通過 CDP 連入同一個守護進程,會話用隔離的 BrowserContext 分開,避免每個插件或技能各起一份 Chromium 佔內存。
安全邊界¶
CDP 不直接對外監聽。對內隨機端口 + 迴環代理,讀元數據與 /devtools 需 Authorization: Bearer <token>(v0.3.0 起)。代理側可統計連接數。
與內置方案的取捨¶
組合 patch(plugin/cordis.patch.yml)會:選 cdp-daemon、插入 tool-browser 與 browser-cdp provider,並關掉內置 browser-electron 與 dsh-playwright-browser(後者 10 個與內置同名的 browser_* 工具不能與雙 provider 共存)。
守護進程生命週期¶
browsersvc 默認空閒約 15 分鐘可退出(--idle-ms,上限 24 小時);插件自啓默認 idleMs 爲 5 分鐘。最後一個會話關閉後插件會主動斷開 CDP,守護進程纔可能真正空閒;下次調用瀏覽器會自動再拉起。
端點不通時不必手寫 autoStartCommand:插件默認執行本包 bin/browsersvc.mjs start。要固定端口或內核時,再在 profile 的 cordis.patch.yml 裏整行覆蓋 browser-cdp 的 config(須重述 cdpUrl)。
安裝與啓用¶
推薦一條命令(可重複執行):
dsh plugin --profile web add dsh-browser-service@latest
釘版本或離線分發時,README 示例爲 Release 資產或本地 tgz,例如:
dsh plugin --profile web add https://github.com/lyp88997/dsh-browser-service/releases/download/v0.8.2/dsh-browser-service-0.8.2.tgz
裝完後必須重啓 DSH(插件在 boot 時 import,熱重載不可靠)。校驗組合是否生效:
dsh --profile web --dump-config | grep -E 'browserProvider|# == dsh-browser-service|not found'
期望看到 browserProvider: cdp-daemon 與 # == dsh-browser-service 層;僅裝本包時 browser-electron / playwright-browser 守衛行打印 not found 屬正常。
安裝時注意的三條¶
- 不要再單獨裝
dsh-builtin-browser:與本包組合會導致browser/tool-browser重複、33 個工具掛兩遍。若已裝,先dsh plugin --profile <name> remove dsh-builtin-browser。 - 不要用舊裸包名
dsh-browser-cdp:npm 上同名包屬他人項目;本倉庫自 2026-09-27 起以dsh-browser-service發佈。 - 不要與手寫
cordis.patch.ymlinsert 同時疊 bundle patch,以免重複插入(改源碼臨時用法見倉庫docs/profile-patch.browser-service.yml)。
升級:dsh plugin --profile web add dsh-browser-service@latest(@latest 在已滿足依賴範圍時可能不會升版,要換版本請用 Release URL 或本地 tgz)。插件與 browsersvc 須同版本升級;順序建議先換插件並重啓 DSH,再 browsersvc restart。
卸載:
dsh plugin --profile web remove dsh-browser-service
可選停止守護進程(路徑隨 profile 安裝位置而定,README 給出通過 dump-config 定位 node_modules/dsh-browser-service 再 stop 的寫法)。
典型用法¶
依賴插件自動起守護進程¶
裝上並重啓後,首次調用瀏覽器相關工具或 ctx.browser 時,插件會用默認 autoStartCommand 拉起守護進程,多數場景無需手工步驟。
手動起守護進程與驗證¶
需要固定端口、指定 wrapper 或排查環境時,進入插件目錄(profile 下的 node_modules/dsh-browser-service):
node bin/browsersvc.mjs detect
node bin/browsersvc.mjs start --port=9333 --idle-ms=900000
node bin/browsersvc.mjs status
驗證 CDP 元數據(token 來自 $DSH_HOME/browser-service/service.json):
TOKEN=$(node -p 'JSON.parse(require("fs").readFileSync(process.env.DSH_HOME+"/browser-service/service.json","utf8")).token')
curl -s -H "Authorization: Bearer $TOKEN" 127.0.0.1:9333/json/version
停止:
node bin/browsersvc.mjs stop
DSH 容器內 README 實測示例會使用 --wrapper 指向注入 LD_LIBRARY_PATH、FONTCONFIG_FILE 以及 --no-sandbox --disable-dev-shm-usage 的腳本;無 wrapper 時用 --kernel 指定 chrome-headless-shell,須保證系統庫與字體可用,否則易出現截圖純白或中文方塊。
給 dsh-univer-office 配可執行路徑¶
Univer 不接遠端 CDP,保持「可執行文件路徑」即可,例如:
- id: univer
config:
browserExecutablePath: /home/node/DSH/.browser/chromium-wrapper.sh
與守護進程共用同一份二進制與庫,由 Univer 自起臨時實例。
網頁面板¶
重啓 DSH 後,頁面左上角出現可配置位置與外觀的膠囊;點開即瀏覽器窗口(網頁 / 操作 / 控制台 / 網絡 / 設置),中間爲實時交互畫面。分辨率、留白、網絡日誌清理上限等可在設置區調整。
適用場景與注意¶
適合誰:在 web profile 裏跑 DSH、部署在無 GUI、無 root 或 seccomp 限制的容器/服務器上,又需要穩定 browser_* 工具鏈或可視化調試網頁自動化的開發者。
權限與安全:插件與當前 DSH 進程同權限運行;安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,自行評估是否引入依賴 dsh-builtin-browser 等 transitive 包。
環境:需 Node >= 22.19;需本機或用戶態目錄內可用的 chrome-headless-shell(或 README 所述 wrapper 所指向的二進制與庫)。
生態說明:DSH 主張「一切皆插件」;SkillHub 目錄頁 是社區收錄站點,與 DeepSeek / 幻方無官方從屬關係。倉庫 GitHub 星標以頁面爲準(撰寫時線索爲 0)。
結尾¶
dsh-browser-service 把「單例 CDP + token 門 + 33 工具 + 網頁實時窗」收成一包,專門對齊 DSH 在無 Electron、無 root 環境下的瀏覽器接縫。安裝命令以 README 爲準:dsh plugin --profile web add dsh-browser-service@latest,重啓後覈對 browserProvider: cdp-daemon 即可開用。
- 目錄頁:https://www.skillhub.cn/plugins/lyp88997/dsh-browser-service
- 源碼與文檔:https://github.com/lyp88997/dsh-browser-service