dsh-device-deck:在 Harness Web UI 中統一管理設備鏡像與模擬器

前言

在 DeepSeek Harness(DSH)裏做智能體或會話式開發時,經常需要對照真機或模擬器上的界面:截圖進對話、點按驗證、拉起 AVD。把 scrcpy、adb、Xcode 模擬器拆到多個終端,和 Web 會話之間來回切換,上下文容易斷。社區插件 dsh-device-deck(維護者 zhouatie,分類:客戶端)把設備列表、Android 鏡像、模擬器管理與少量 Agent 工具收到 Session 頂欄和浮動鏡像裏,在同一套 Harness Web UI 中完成上述操作。插件當前爲 alpha(0.3.0);README 寫明 Android 鏡像可用,iOS / Web 頁面鏡像與 AI E2E 測試在路線圖上且尚未實現。

這是什麼

Device Deck 是帶 Host 與 Client 兩半的 DSH 插件:description 爲 “Device mirror, emulator manager, and agent tools for DeepSeek Harness.” Host 註冊 /api/device-deck/* 路由並驅動本機 adb、xcrun 等;Client 注入會話頭部,渲染設備菜單與鏡像浮層。代碼採用 MIT 許可證;包內捆綁 scrcpy-server 3.3.3(Apache-2.0),無需單獨安裝 scrcpy 客戶端。插件不依賴雲服務,設備命令走本機工具鏈;截圖僅在用戶通過輸入框 + 菜單加入 composer 併發送時進入當前聊天。

目錄頁:https://www.skillhub.cn/plugins/zhouatie/dsh-device-deck
源碼:https://github.com/zhouatie/dsh-device-deck

核心功能(當前已實現)

下面按 README「Available now」歸納;路線圖中的 Web 預覽、模擬器鏡像、E2E、錄製回放、多設備 deck 均不算已實現能力。

會話頭部的設備菜單

Session 右上角設備圖標一鍵展開:運行中的設備、已停止的 Android AVD、iOS 模擬器列表,並支持無線 ADB 配對。

Android 鏡像與控制

  • 使用 scrcpy 推流,頁面內用 WebCodecs 解碼視頻。
  • 鏡像打開時可通過 scrcpy 控制通道關閉物理屏,關閉鏡像後恢復(部分 OEM 可能不生效)。
  • 支持點擊、滑動、返回、Home、多任務、文本輸入、打開 URL / deep link。
  • 快捷鍵 Ctrl+M 打開或關閉鏡像。

模擬器與真機管理

  • Android AVD:列出、無頭啓動、停止,就緒後打開鏡像。
  • iOS 模擬器:列出、啓動/關閉、打開 Simulator 應用;不提供模擬器畫面鏡像。
  • iOS 真機:用 devicectl 列出已連接 iPhone/iPad;通過 WebDriverAgent MJPEG 鏡像畫面,支持點按、滑動、輸入、Home、截圖;首次啓動會構建 WebDriverAgent(約 2–5 分鐘,緩存於 ~/.dsh/device-deck/wda)。

連接、文件與截圖

  • 無線 ADB:填寫 host 或 host:port(僅 host 時默認端口 5555)。
  • 文件傳輸:從本機選文件,經 adb push 推到所選設備的 /sdcard/Download/<name>(單次一個文件,最大 2 GB)。
  • 截圖:保存當前畫面;最新截圖可瀏覽;輸入框 + 菜單選 Device screenshot 將選中截圖加入 composer。
  • Agent 工具:device_screenshot 將當前選中的截圖作爲圖片返回給智能體。

截圖目錄:~/.dsh/device-deck/screenshots(每設備保留最新 30 張,已選中的截圖不會被自動刪除)。上傳臨時文件在 ~/.dsh/device-deck/uploads。

環境與依賴

安裝前請對照 README「Requirements」:

  1. 支持插件的 DeepSeek Harness 實例。
  2. Host 側 Node.js ≥ 20(package.json 中 engines.node)。
  3. Android:adb(platform-tools)、管理 AVD 時需 Android SDK emulator。
  4. iOS 模擬器:macOS 上 Xcode 命令行工具。
  5. iOS 真機:macOS、帶 iOS SDK 的 Xcode、iproxy(libimobiledevice)、設備開啓開發者模式;Xcode 需登錄 Apple ID 做自動簽名(免費賬號簽名約 7 天有效,過期需重新構建 WDA)。

限制摘要:鏡像同時僅一臺設備;視頻 H.264 only(H.265 設備報錯);Android 文本輸入經 adb shell input text,僅 ASCII;iOS 真機鏡像時設備須解鎖並保持喚醒;iOS 真機無法像 Android 那樣關物理屏推流。

安裝與啓用

官方 README 採用本地目錄安裝(bundle 鏈接到該文件夾,移動或刪除目錄會導致插件失效)。步驟如下。

  1. 獲取源碼並進入目錄:
git clone https://github.com/zhouatie/dsh-device-deck.git
cd dsh-device-deck
  1. 安裝依賴:
pnpm install
  1. 在 Harness 中安裝該文件夾爲 bundle:通過 Settings → Plugins,或使用插件管理器指定該目錄的絕對路徑。

  2. 刷新一次 Harness Web 頁面。

依賴變更後需在同一目錄再次執行 pnpm install。開發自檢可運行:

pnpm check

(對 index.js 與 client.js 做 node --check。)

插件以當前 DSH 進程權限運行,可調用本機 adb、xcrun 並讀寫 ~/.dsh/device-deck/。安裝前應自行審閱源碼與 MIT / 捆綁 scrcpy 的許可證條款。

典型用法

  1. 打開一個 Session。
  2. 點擊 Session 頭部右上角的設備圖標。
  3. 選擇已運行的 Android 設備打開鏡像,或啓動處於停止狀態的 AVD。
  4. 鏡像左側欄:返回、Home、多任務、文本、鏈接、截圖、歷史(有截圖後出現)、重連、關閉;附件圖標可選文件推送到設備。
  5. 標題欄:設備切換、連接狀態、拖拽手柄。
  6. 若要把畫面交給模型:打開輸入框 + → Device screenshot → 選擇截圖 → 可在 composer 中補充文字後發送。

無線 ADB 示例(在插件提供的連接輸入中使用):

192.168.1.102:5555

架構要點

Host(index.js)爲每臺 Android 設備維護 scrcpy 會話,視頻經同源分塊 HTTP 傳到瀏覽器;Client(client.js)負責頭部菜單與 WebCodecs 解碼渲染。iOS 真機路徑由 Host 構建/啓動 WebDriverAgent,iproxy 轉發端口並中繼 MJPEG,輸入走 WDA HTTP API。捆綁的 bin/scrcpy-server 版本爲 3.3.3。

適用場景與注意

  • 適合:已在 DSH 會話裏做 Android / iOS 真機聯調、需要把設備截圖餵給 Agent、或在 Web UI 內管理 AVD / 模擬器而不必頻繁切終端的開發者。
  • 不適合:依賴路線圖中尚未交付的 Web 頁面遙控、iOS 模擬器畫面鏡像、或多設備同屏;需要非 ASCII 輸入或 H.265 推流的場景需另尋方案。
  • 生態說明:DSH 奉行「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係,本文安裝步驟以 GitHub README 爲準。

結尾

dsh-device-deck 把設備鏡像、模擬器管理和 device_screenshot 工具收進 Harness 會話界面,減少 adb / scrcpy / 模擬器與聊天窗口之間的切換。使用前請確認 Node、SDK 與平臺依賴齊全,並知曉 alpha 版本與 README「Limitations」中的約束。

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

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

小夜