DeepSeek Harness 自定义右键菜单插件

DSH Web 提供了插件化能力,但原生的浏览器右键菜单通常难以直接定制。开发者在需要自定义操作(如特定节点的上下文操作)或集成系统工具(如直接打开工作区目录)时,往往需要自己实现复杂的拦截逻辑。dsh-custom-context-menu 插件解决了这个问题,它通过全局接管浏览器的 contextmenu 事件,提供了一个零依赖的扩展框架,并内置了在文件管理器中打开工作区文件夹的功能。

插件概览

这是一个 DeepSeek Harness Web UI 的自定义右键菜单插件。它由开发者 sulfide2085 维护,采用 MIT 许可证。插件的核心价值在于:第一,提供了一套可扩展的 Provider API,允许开发者通过代码注册自定义菜单项;第二,内置了针对 DSH 工作区侧边栏的“在资源管理器中打开文件夹”功能。

核心功能

  • 全局接管与智能定位:插件会拦截页面全局的右键事件(输入框和菜单自身除外),并在屏幕边缘自动调整位置,确保菜单始终可见。
  • 可扩展 Provider API:支持通过 register 函数注册菜单项。支持常规项、分隔线、分组标题,并支持禁用、危险操作标记及提示信息。
  • 无命中不打扰:如果没有任何 Provider 匹配当前右键目标,插件会放行浏览器原生的右键菜单,避免显示“暂无菜单项”的占位符。
  • 工作区文件夹打开:右键侧边栏的工作区行,提供“打开文件夹”选项。支持 Windows (explorer.exe)、macOS (open)、Linux (xdg-open),并在路径失效时报错。
  • 键盘导航:支持使用方向键选择菜单项,Enter 或 Space 触发。

安装与启用

使用官方 CLI 进行安装。

dsh plugin --profile web add "https://github.com/sulfide2085/dsh-custom-context-menu.git"

安装完成后,重启 DSH Web 进程即可生效。

典型用法

安装后,可以通过浏览器控制台或扩展代码调用 window.dshContextMenu 对象。

1. 注册菜单项

使用 register 方法注册一个回调函数,该函数接收目标元素和事件对象,返回菜单项数组。

window.dshContextMenu.register((target, event) => {
  // 检查是否为目标元素
  const row = target.closest("[data-session-row]");
  if (row === null) return null; // 不处理,交给下一个 provider

  return [
    { type: "label", text: row.dataset.title },
    { label: "复制标题", onClick: () => navigator.clipboard.writeText(row.dataset.title) },
    { type: "separator" },
    { label: "删除会话", danger: true, onClick: () => { /* ... */ } }
  ];
});

2. 菜单项类型

菜单项支持以下形式:
* 字符串:简写,label 即为字符串内容。
* 对象:包含 label、onClick、disabled、danger、hint 等属性。
* 分隔线:{ type: "separator" }。
* 分组标题:{ type: "label", text: "标题" }。

3. 控制菜单

可以通过 API 控制菜单的开关和显示。

// 开启或关闭全局菜单
window.dshContextMenu.setEnabled(true);
// 命令式在指定坐标弹出菜单
window.dshContextMenu.open(x, y, items);

适用场景与注意

  • 单层菜单:当前版本不支持多级子菜单,菜单项为扁平结构。
  • 工作区匹配:“打开文件夹”功能依赖于 DSH Web 官方的 workspace 行结构与 ctx.workspaces 服务。匹配规则包括行尾省略号按钮的 aria-label、行内首个文本 span 匹配 workspace title 或目录 path 的 basename。
  • 原生菜单放行:在输入框、文本域或可编辑元素上右键,或无匹配项时,插件会完全放行浏览器原生的右键菜单,保留复制粘贴等基础功能。

总结

该插件通过简单的 API 封装,解决了 DSH Web 环境下的右键菜单定制需求,适合需要深度集成系统工具或自定义交互的开发者。

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

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

小夜