dsh-open-in-app:DeepSeek Harness Web UI 插件,用於從會話頭部打開工作區文件夾

前言

在使用 DeepSeek Harness (DSH) Web UI 進行智能體開發時,開發者經常需要從瀏覽器環境切換回本地文件系統,打開當前會話的工作區文件夾。這種跨窗口的操作會打斷工作流。dsh-open-in-app 插件通過在 DSH Web UI 的會話頭部工具行集成一個 Codex 風格的控件,提供了一鍵打開文件夾的能力。

核心功能

該插件在會話頭部工具行新增了一個膠囊狀的拆分控件。控件包含一個文件夾按鈕和一個下拉箭頭。

  1. 文件夾按鈕:點擊後使用上次爲該工作區選擇的應用打開文件夾。如果無歷史記錄,則回退到默認編輯器(優先級:VS Code > Cursor > Windsurf > Zed > …)。按鈕上會顯示對應應用的圖標。
  2. 下拉箭頭:點擊展開菜單,包含“最近使用”、“系統默認應用”以及主機上已安裝的終端和編輯器白名單。每一項均帶有應用圖標(如 macOS 的 Finder、Windows 的資源管理器)。
  3. Remote 端點:插件在宿主端註冊了 openInApp 服務,提供 listApps、openWith、openDefault、openDefaultEditor 四個方法,供其他插件或邏輯調用。

安裝與啓用

插件安裝命令如下:

dsh plugin --profile web add dsh-open-in-app

安裝完成後,必須重啓 dsh web 應用。插件加載器與客戶端模塊圖在啓動時組合,新增插件不支持熱重載。重啓後,該控件會出現在會話標題旁。

典型用法

  1. 在聊天窗口右上角找到該控件。
  2. 直接點擊文件夾圖標,使用默認或上次選擇的應用打開工作區。
  3. 點擊下拉箭頭,選擇特定應用(如 Terminal、VS Code)打開。
  4. 若需自定義白名單,編輯 lib/apps.js 中的 WHITELIST 數組。

白名單與配置

菜單中的應用由白名單控制。默認白名單包含常用的終端和編輯器,如 Terminal、iTerm2、Ghostty、Warp、VS Code、Cursor、Zed 等。

要增刪條目,需編輯 lib/apps.js 中的 WHITELIST 數組。每個條目爲 { id, category, match, exact? } 結構:
* id:規範顯示名(也是原生打開命令必須能找到的名稱)。
* match:用於子串匹配的別名。
* exact:用於全名匹配,防止短名稱衝突(如 code 誤匹配 CodeRunner)。

技術細節與注意事項

  • 平臺實現:
    • macOS:通過 sips 轉換 .icns 爲 32px PNG,使用 open -a "<app>" <path>。
    • Windows:通過 PowerShell 提取 .exe 內嵌圖標,使用 cmd /c start "" <exe> <path>。
    • Linux:解析 .desktop 文件,使用 gtk-launch <id> <path> 或回退到 xdg-open。
  • 圖標解析:僅讀取枚舉的應用路徑和 freedesktop 圖標主題目錄,緩衝區上限 256KB。緩存機制按源路徑 + mtime,降低重複打開開銷。
  • 安全與權限:
    • Remote 端點不在特權方法列表中,僅限 loopback 或可信主機訪問。
    • 打開路徑派生原生進程,路徑來自會話自身的 cwd。
    • 命令失敗(如應用缺失)會在菜單中顯示錯誤行,不拋出異常。
  • 開發約束:客戶端 bundle 必須保持自包含,無構建步驟。

結尾

dsh-open-in-app 通過在 Web UI 中嵌入原生文件系統操作能力,簡化了智能體開發中的環境切換流程。該插件基於 MIT 許可證開源,適合需要頻繁在瀏覽器與本地編輯器之間切換的開發者使用。

插件目錄 | GitHub 倉庫

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

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

小夜