为 DSH Web 界面补上右键菜单:文字与输入框可复制/剪切/粘贴/全选,文件引用与链接可复制路径、在文件管理器中定位、用默认应用打开。
安装
# npm 包(预构建)
dsh plugin --profile web add @z1995418/dsh-file-menu
# Release 预构建包
dsh plugin --profile web add "https://github.com/dreammaker2016/dsh-file-menu/releases/latest/download/dsh-file-menu.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:dreammaker2016/dsh-file-menu
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
为 DeepSeek Harness(DSH)Web 界面补上右键菜单。
DSH 的 Web 客户端本身没有任何 contextmenu 处理,在应用里点右键没有任何有用反应——没有复制、没有粘贴、没有"打开文件位置"。
本插件补上一个 Codex 风格的右键菜单,菜单内容随点击位置的元素类型变化。
English | 简体中文
功能
按点击位置智能生成菜单:
| 右键位置 | 菜单项 |
|---|---|
| 选中的文字 | 复制 |
| 普通段落(无选中) | 复制此段文字 |
| 输入框 / 编辑区 | 剪切 · 复制 · 粘贴 · 全选 |
| 文件引用(交付文件卡片、"生成的文件"芯片、消息里的内联文件引用) | 复制路径 · 打开文件位置 · 用默认应用打开 |
| 超链接 | 复制链接地址 · 在浏览器中打开 |
| Alt + 右键 | 诊断:复制元素信息(排查用) |
- 复制:优先走宿主路由
/file-menu/clipboard(Electron 主进程剪贴板,失败退回 PowerShellSet-Clipboard), 不依赖渲染进程的剪贴板权限;宿主路由不可用时,客户端退回浏览器本地document.execCommand('copy')。 - 打开文件位置:在系统支持"选中"的平台上会真正选中该文件——Windows 资源管理器
/select、macOS Finderopen -R; Linux 的xdg-open没有选中语义,退而打开所在目录。宿主路由完全不可用时,客户端退回 DSH 自带的/open-in-app/open(打开所在文件夹)。 - 文件路径识别来源:元素的
title/data-path/data-file-path/dataset.*path、元素自身的文本 (DSH 工具行的 fileLink 按钮没有任何路径属性,路径只在文本里)、或选中的绝对路径。 DSH 对工作区内的文件引用显示的是相对路径(dsh-plugins/x/README.md、@docs/plan.md), 因此相对路径会用当前会话的工作区根解析——客户端从 DSH 的sessions服务读取 (list.getSnapshot()→byId[current].cwd),~/...由宿主半端展开。取不到工作区根时不猜, 直接不显示文件操作行。
安装
从 npm 安装:
dsh plugin --profile web add @z1995418/dsh-file-menu
从源码安装:
dsh plugin --profile web add github:dreammaker2016/dsh-file-menu
每个 Release 还附带预构建 tarball
(dsh-file-menu.tgz),可用 dsh plugin --profile web add <tarball 地址> 安装。
profile 名写你实际在用的那个(Web 客户端是 web,DSH Desktop 用你自己的 profile 名)。装完重启 DSH 才会加载。
卸载
dsh plugin --profile web remove dsh-file-menu
限制
- 出现在正文里的相对路径,只有单个 token(不含空白)、含路径分隔符且末段带文件扩展名时才会被识别。 带空格的路径、只有文件名(没有目录)、没有扩展名的目录会被跳过——这正是「复制/粘贴」这类正常文字不会长出文件操作行的原因。
- 相对路径依赖当前会话的工作区根。如果读不到 DSH 的
sessions服务,就不显示文件操作行,而不是瞎猜。 - 两端版本各自独立:客户端半端(
lib/client.js)跟随包版本,宿主半端版本从GET /file-menu/status读取。
原理
- 宿主半端
lib/index.js:webServer前缀路由/file-menu,提供ping、status、hello、menu、diag、clipboard、reveal、open。reveal/open接收{ path, base }:绝对路径直接用、~/...展开到家目录、相对路径按base(会话工作区根)拼接,最后只对真实存在的路径动手。 - 客户端半端
lib/client.js:捕获阶段监听contextmenu+ 纯 DOM 菜单(不依赖 React); 用pointerdown+elementFromPoint命中激活,避免上游stopPropagation把点击吞掉。 cordis.patch.yml:注册宿主半端的那一行。宿主条目声明了dsh.client,客户端 bundle 由 DSH 自动下发。
维护者笔记(HMR 踩坑、事件被吞、没有浏览器控制台时怎么排查)见 docs/DEVELOPMENT.md。
许可
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8597
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8597
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4424
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
ccch1mneyyy/dsh-TUI★ 4268
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/DSH-better-sidebar★ 4098
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1445
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。