dsh-browser-slotpool:併發瀏覽器會話槽位池插件

前言

DeepSeek Harness (DSH) 允許在 profile 中添加 MCP 客戶端實例以調用瀏覽器能力。在多會話或多 profile 場景下,直接啓動多個瀏覽器實例通常會導致端口衝突、內存佔用過高以及進程間的互相干擾。dsh-browser-slotpool 插件通過引入“槽位池”機制,將併發瀏覽器會話的數量顯式化並加以隔離,解決上述衝突問題。

這是什麼

這是一個爲 DSH 提供的 patch 層 bundle。它本質上是一個瀏覽器啓動器,封裝了 @playwright/mcp 的 stdio 通信。插件維護一個固定數量的 CDP 端口池,每個 DSH mcp-client 實例獨佔一個槽位,確保會話之間互不破壞。插件本身沒有 TypeScript 源碼和構建步驟,安裝後即開箱即用。

核心功能

該插件主要提供以下能力:
* 槽位池管理:維護一組固定的 CDP 端口(默認 9222, 9223),先到先得,滿員時拒絕新連接。
* 原子加鎖與自愈:使用 fs.openSync 的獨佔標誌實現原子加鎖。通過檢查持有者的 PID 活性,自動回收異常退出的進程鎖,避免“槽全忙”的死鎖狀態。
* 冪等就緒探測:在啓動 Chrome 前先探測端口是否已開啓,避免重複啓動;不主動殺死其他槽位的瀏覽器。
* 所有權隔離:嚴格限制每個 mcp-client 會話只能操作分配給它的槽位,不代理、不竊取。
* 全委託:將 stdio 通信完全委託給 @playwright/mcp,並將診斷日誌輸出到 stderr 以保證 MCP 協議通道的暢通。

安裝與配置

安裝插件需要從 GitHub 倉庫添加依賴到當前 DSH profile。

  1. 在 DSH 的 checkout 目錄(與 GUI 所在 profile 一致)執行:
    pnpm dsh plugin --profile web add github:bluechips-zhao/dsh-browser-slotpool
  1. 安裝完成後,重啓目標 profile 以加載依賴。

關鍵配置步驟

由於 !!js 在 DSH 中求值時沒有模塊作用域,啓動器路徑必須通過環境變量顯式指定。

  1. 找到插件安裝後的啓動器路徑:
    <DSH_HOME>/profiles/<name>/node_modules/@deepseek-ai/dsh-browser-slotpool/bin/browser-slotpool.mjs
  1. 將該絕對路徑設置到環境變量 DSH_BROWSER_LAUNCHER(臨時或寫入啓動腳本):
    $env:DSH_BROWSER_LAUNCHER = "<DSH_HOME>/profiles/<name>/node_modules/@deepseek-ai/dsh-browser-slotpool/bin/browser-slotpool.mjs"

可選環境變量

啓動器會讀取以下環境變量來控制行爲:

變量名 默認值 說明
DSH_BROWSER_PORTS 9222,9223 槽位池包含的 CDP 端口列表,逗號分隔。
DSH_BROWSER_BASE_DIR LOCALAPPDATA/mcp-shared-browsers 共享瀏覽器數據目錄和鎖文件的根路徑。
DSH_PLAYWRIGHT_MCP_ENTRY (空) @playwright/mcp 的 cli.js 絕對路徑。設置後可直接調用 node,避免 npx 網絡開銷。
DSH_PLAYWRIGHT_MCP_CMD npx 調用 Playwright MCP 的命令(僅在 entry 未設置時使用)。
CHROME_PATH (系統探測) Chrome/Chromium 可執行文件的絕對路徑。

使用示例

在 profile 的配置中添加 @deepseek-ai/dsh-mcp-client 實例:

  1. 在配置文件中添加該實例。
  2. 設置 command 指向 bin/browser-slotpool.mjs,設置 args 爲空數組。
  3. 確保 DSH_BROWSER_LAUNCHER 環境變量已正確指向上述啓動器路徑。

完成配置後,瀏覽器工具會以 mcp__browser__<rawName> 的形式出現在模型可用工具列表中。

本地驗證

運行倉庫自帶的冒煙測試腳本來驗證全鏈路:

node test/mcp-client-smoke.mjs

該腳本會啓動本地服務器、創建槽位、連接 Playwright MCP 並執行截圖操作,確認渲染真實頁面。

適用場景與注意

  • 適用場景:需要在一個 DSH profile 中同時運行多個瀏覽器實例,且希望嚴格隔離資源和端口的場景。
  • 運行前提:
    • 需要本地安裝 Chrome/Chromium 瀏覽器。
    • 需要依賴 DSH 自帶的 @deepseek-ai/dsh-mcp-client。
    • 需要依賴 @playwright/mcp(若未設置 DSH_PLAYWRIGHT_MCP_ENTRY,首次調用需聯網拉取)。
  • 注意事項:
    • 這是一個純 .mjs 文件,無 TypeScript 源碼,修改需直接編輯源文件。
    • 若修改倉庫命名空間,需同步更新 dsh plugin add 中的 GitHub 地址。
    • 外網訪問能力取決於部署環境(若使用 npx 調用 Playwright MCP)。

結尾

dsh-browser-slotpool 通過顯式的槽位管理和 PID 活性檢查,爲 DSH 提供了一個健壯的併發瀏覽器解決方案。它解決了多實例環境下的資源競爭問題,適合需要穩定多會話協作的開發者使用。

更多詳情及源碼,請訪問:GitHub 倉庫

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

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

小夜