前言¶
DSH 側邊欄插件,把每個工作區文件夾行變成一鍵直達入口。懸停即現 訪達 / Zed / Ghostty 三個圖標,點一下就在本機對應應用中打開該目錄。
核心能力¶
- 行內懸停按鈕:每個
workspace:<id>側邊欄行右側自動追加三個 16px 圖標按鈕,與原生···菜單並排,不遮擋原有操作。 - 可用性感知:啓動時請求
/status,只渲染本機真實存在且配置允許的應用按鈕(沒裝 Zed 就不顯示 Zed 按鈕)。 - 中英雙語:跟隨 DSH locale,中文顯示「在訪達中打開」,英文顯示 “Open in Finder”(含
title+aria-label無障礙標籤)。 - 操作反饋:成功/失敗均有右下角 toast 提示(
已在 Finder 中打開/打開失敗:…),按鈕在請求期間置灰並脈衝動畫,防止重複點擊。 - 服務端解析路徑:瀏覽器只發送
workspaceId + app,真實目錄由服務端workspaceRegistry解析,客戶端無法僞造路徑打開任意目錄。 - 無 shell、無 PATH 查找:統一
execFile('open', [...固定參數]),不存在命令注入面。
安裝與配置¶
安裝¶
dsh plugin --profile web add "github:johnsonspirit/open-with-finder-ide"
安裝後重啓 DSH(dsh web)即生效。
配置¶
插件配置(Config["~standard"] 標準 schema,可缺省,全缺省即三項全開):
| 字段 | 類型 | 默認 | 說明 |
|---|---|---|---|
finder |
boolean | true |
是否啓用「在訪達中打開」 |
zed |
boolean | true |
是否啓用「在 Zed 中打開」 |
ghostty |
boolean | true |
是否啓用「在 Ghostty 終端中打開」 |
示例——只保留訪達和 Zed:
config:
finder: true
zed: true
ghostty: false
使用方法¶
- 啓動 DSH,打開任意帶工作區文件夾的側邊欄視圖。
- 把鼠標懸停到某一工作區行(例如
open-folder ~/src/Misc/open-folder)。 - 行右側出現三個圖標:笑臉(訪達)/ 方塊 Z(Zed)/ 小幽靈(Ghostty),懸停有中文 tooltip。
- 單擊圖標 → 對應應用打開該目錄 → 右下角 toast 確認。
- 若某應用未安裝,對應圖標自動隱藏,無需任何配置。
API 調用¶
基址:/api/dsh-folder-open。全部接口僅限 loopback(127.0.0.1 / ::1 / localhost)。
查詢能力¶
curl http://127.0.0.1:PORT/api/dsh-folder-open/status
返回示例:
{
"ok": true,
"mac": true,
"apps": { "finder": true, "zed": true, "ghostty": true },
"enabled": { "finder": true, "zed": true, "ghostty": true }
}
打開目錄¶
curl -X POST http://127.0.0.1:PORT/api/dsh-folder-open/open \
-H 'content-type: application/json' \
-d '{"workspaceId":"abc123","app":"finder"}'
| 字段 | 約束 |
|---|---|
workspaceId |
非空字符串,長度 ≤ 80,必須能在 workspaceRegistry 中解析出 path |
app |
僅限 finder / zed / ghostty |
| body 上限 | 16 KiB,超限按 invalid request 處理 |
運行要求與安全¶
運行要求¶
| 依賴 | 版本 / 說明 |
|---|---|
| Node.js | ≥ 18 |
| 操作系統 | macOS(darwin)——打開目錄走系統 open 命令,非 macOS 下接口返回 mac: false 且按鈕不渲染 |
| DSH host | 提供 webServer(路由註冊)與 workspaceRegistry(get(id) → { path })注入 |
安全設計¶
- 路徑永不信任客戶端 —
workspaceId → path只走服務端workspaceRegistry.get(),POST body 里根本沒有 path 字段可供僞造。 - Loopback 強校驗 —
remoteAddress+Host+Origin+Sec-Fetch-Site四重檢查,局域網其他機器與跨站頁面無法調用。 - 固定 argv — 所有喚起走
execFile('open', [...]),目錄作爲單個 argv 元素傳遞,不經過 shell。 - 輸入上限 — body 16 KiB 封頂,
workspaceId限長 80 字符。 - 能力探測不走 PATH — 只檢查
/Applications與~/Applications下的固定*.app,避免 PATH 劫持誤報。
結尾¶
該插件通過服務端解析路徑與 Loopback 校驗,確保了本地喚起的安全性。適合需要在 DeepSeek Harness 中頻繁切換工作區目錄的開發者。更多細節可參考 項目主頁 或 GitHub 倉庫。