Open with Finder / IDE — DSH 工作区快捷打开插件

前言

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

使用方法

  1. 启动 DSH,打开任意带工作区文件夹的侧边栏视图。
  2. 把鼠标悬停到某一工作区行(例如 open-folder ~/src/Misc/open-folder)。
  3. 行右侧出现三个图标:笑脸(访达)/ 方块 Z(Zed)/ 小幽灵(Ghostty),悬停有中文 tooltip。
  4. 单击图标 → 对应应用打开该目录 → 右下角 toast 确认。
  5. 若某应用未安装,对应图标自动隐藏,无需任何配置。

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 })注入

安全设计

  1. 路径永不信任客户端 — workspaceId → path 只走服务端 workspaceRegistry.get(),POST body 里根本没有 path 字段可供伪造。
  2. Loopback 强校验 — remoteAddress + Host + Origin + Sec-Fetch-Site 四重检查,局域网其他机器与跨站页面无法调用。
  3. 固定 argv — 所有唤起走 execFile('open', [...]),目录作为单个 argv 元素传递,不经过 shell。
  4. 输入上限 — body 16 KiB 封顶,workspaceId 限长 80 字符。
  5. 能力探测不走 PATH — 只检查 /Applications 与 ~/Applications 下的固定 *.app,避免 PATH 劫持误报。

结尾

该插件通过服务端解析路径与 Loopback 校验,确保了本地唤起的安全性。适合需要在 DeepSeek Harness 中频繁切换工作区目录的开发者。更多细节可参考 项目主页 或 GitHub 仓库。

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

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

Xiaoye