dsh-auto-click: Enhancing the DSH Web GUI Sidebar with File Gestures and Context Menus

前言

在 DeepSeek Harness(DSH)里开发时,左侧文件树和聊天里的文件链接是高频入口:多数时候你只想在侧边栏里快速预览,但有时需要用系统默认编辑器打开、复制绝对路径,或在资源管理器里定位文件。宿主默认的左键预览往往够用,却缺少「Ctrl+左键直开本地应用」和统一的右键菜单。社区维护者 Analoty 的 dsh-auto-click 是一类 客户端 插件,专门在 DSH Web GUI 上为这些场景补手势和菜单,而不改写左键预览本身。

下面介绍它的定位、能力与安装方式;事实以 GitHub 仓库 README 为准。

这是什么

dsh-auto-click 是 DSH 的客户端插件:在 Web GUI 侧边栏(以及聊天中的文件链接)上监听鼠标操作,需要打开本地文件或复制路径时,经 Host 半调用系统 API,并走 DSH 自身的请求信任栅栏与会话工作区路径校验。

  • 维护者:Analoty
  • 分类:客户端(dsh.client.platform: web,立即注入 UI 相关 slot)
  • 环境要求:DSH >= 0.2.0-rc.1(见 package.json 的 engines.dsh)
  • 当前 npm 版本(资料中明确):0.1.3
  • 许可:MIT

核心功能

鼠标手势

操作 结果
左键单击 在侧边栏打开文件预览(宿主原有行为,插件不干预)
Ctrl + 左键单击 用系统默认应用打开;没有默认应用时弹出「打开方式」
右键单击文件 弹出文件菜单
右键单击普通链接 弹出「复制链接」菜单

文件右键菜单项

  1. 打开文件 — 系统默认应用打开
  2. 打开方式 — 调用操作系统自带的「打开方式」选择框(插件不维护自己的应用列表)
  3. 另存为… — 通过浏览器下载保存副本
  4. 复制路径 — 复制绝对路径
  5. 复制文件内容 — 复制文件文本内容
  6. 在资源管理器中打开 — 在文件管理器中定位该文件

普通链接右键菜单

  1. 复制链接 — 复制 href 原文(相对路径也照原样复制,不补站点前缀)

成功操作不弹提示(例如复制路径时剪贴板即反馈);只有失败或被拒绝时才提示。

平台支持

  • Windows:完整支持;「打开方式」通过 Shell COM(Shell.Application → Item.InvokeVerb('openas'))实现。
  • macOS:「打开方式」走 open -a。
  • 其他平台:可用,但「打开方式」会明确报告不支持。

在没有交互式桌面的会话(部分远程或服务模式)中,「打开方式」仍可能无法弹出对话框。

路径与安全

文件可能来自左侧文件树、DSH 文件面板或聊天中的文件链接。聊天链接与树节点携带的是工作区相对路径,浏览器半会把当前会话 id 一并发送,由 Host 在该会话的工作区内解析。

没有已知工作区时,相对路径会被拒绝,而不是用进程目录猜测——避免误打开或复制同名但用户未指向的文件。聊天 mention 形如 @"带 空格 的 名字.md" 时,解析前会剥离 @ 与引号(提及语法标点,非文件名一部分)。

打开文件走 DSH 的 sessionController.openWorkspacePath,继承宿主路径校验;Host 路由(如 /auto-click/open 等)经 connection.requestRejection,未认证或跨源请求在业务逻辑前被拒绝。

限制(README 明确)

  • 「复制文件内容」和「另存为」拒绝大于 8 MiB 的文件,不截断。

安装与启用

从 npm 安装。桌面版和 dsh web 是两个独立的 profile,装在一个里不会出现在另一个里,按使用方式选命令。装完后重启对应进程(桌面版重启应用,dsh web 重启该命令)。

桌面版(DSH Desktop)

dsh plugin --profile desktop add dsh-auto-click

终端 dsh web

dsh plugin --profile web add dsh-auto-click

README 说明:dsh plugin 的参数会原样透传给 pnpm,<spec> 可以是包名、包名@版本 或 git 地址;命令动词用 add。

从 GitHub 安装(不经过 npm)

dsh plugin --profile desktop add github:Analoty/dsh-auto-click

本包为纯 JavaScript,无 prepare 构建步骤,从 git 直装不会被 pnpm 的 allowBuilds 策略拦下。若使用 Web 终端,将 --profile desktop 改为 --profile web 即可。

卸载

dsh plugin --profile desktop remove dsh-auto-click
dsh plugin --profile web     remove dsh-auto-click

典型用法

  1. 在侧边栏文件树上 左键 某文件:行为与未装插件时相同,仍在侧边栏预览。
  2. 需要直接用 VS Code、PDF 阅读器等打开时,对该节点 按住 Ctrl 再左键(macOS 上为对应修饰键组合,以实现为准)。
  3. 在聊天里出现的文件链接上 右键,从菜单选择「复制路径」「复制文件内容」或「在资源管理器中打开」等。
  4. 对普通超链接右键,使用「复制链接」获取原始 href。

仓库 README 在 docs/screenshots/file-menu.png 提供了聊天文件链接右键菜单的截图示例。

适用场景与注意

适合谁:日常在 DSH Desktop 或 dsh web 中频繁从侧边栏和聊天跳转本地文件、需要系统级「打开 / 打开方式 / reveal」的开发者。

安装前建议:插件以当前 DSH 进程的权限运行,会通过 Host 调用系统 shell 与文件 API。安装前应阅读 源码 与 MIT 许可证,确认符合你的安全策略。DSH 社区插件目录(如 SkillHub 条目)是独立站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

设计取舍:插件刻意不枚举「能打开 .md 的应用列表」,而把「打开方式」交给 Windows / macOS,以避免错误列表或空列表;README 中记录了 Windows 上 OpenAs_RunDLL 与 detach 子进程等已踩坑,供维护者参考。

结尾

dsh-auto-click 用最小的客户端补丁,把 DSH Web GUI 侧边栏和聊天文件链接上的 预览、Ctrl+直开、右键菜单 串成一套一致的手势;路径解析与会话工作区绑定,打开文件仍走宿主校验。

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

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

Xiaoye