dsh-middle-click-tab-close: Middle-click to Close Tabs in the DSH Right Sidebar

前言

在 DeepSeek Harness(DSH)桌面客户端里,右侧边栏会打开文件、终端、交付物、Guide 等标签页。浏览器里中键点标签即可关闭,是多数开发者已经养成的习惯;DSH 自带标签条只支持左键选中、右键菜单,以及标签上的 × 关闭。中键按下时,dockkit 的 chip 处理逻辑会把它当成左键选中,无法直接关掉标签。若你经常在边栏里开很多页,每次挪到 × 上点一下,会比中键慢一截。下面介绍的插件 dsh-middle-click-tab-close 由社区维护者 icrefin 发布,分类为客户端插件,在不动官方 UI 源码的前提下,让右侧边栏(含浮动窗标题区)支持与中键关闭浏览器标签相同的手势,并走与 × 相同的 ctx.sidebarRight.close(tabId) 关闭路径。

这是什么

dsh-middle-click-tab-close 是一个仅作用于 DSH Web 客户端前端的 Cordis 插件:在文档上注册一个捕获阶段的 pointerdown 监听,当检测到鼠标中键(button === 1)且按压发生在 [data-sidebar-right-session] 内时,解析被点的 [data-dockkit-tab],再调用官方侧栏控制器关闭对应标签。Host 侧入口存在但无业务逻辑,只为 Loader 携带 browser 半包;无配置项、无设置卡片、无额外路由或样式。

维护与源码:

  • 目录页:https://www.skillhub.cn/plugins/icrefin/dsh-middle-click-tab-close
  • 仓库:https://github.com/icrefin/dsh-middle-click-tab-close
  • 许可证:MIT(以仓库 LICENSE 为准)

为什么是插件而不是设置项

右侧标签条是随客户端发布的 UI。dsh-client-ui-dockkit 绘制每个 chip 为 role="tab",其 onPointerDown 仅跳过右键(button !== 2),中键仍会触发选中。dsh-client-ui-sidebar-right 持有列布局、标签注册表以及文档化的 ctx.sidebarRight.close(tabId)。没有用户级开关能单独打开「中键关闭」,也没有扩展 chip 行为的插槽。要在不 fork、不 patch 官方 strip 的前提下增加手势,只能在页面里观察 chip DOM,并调用 UI 已在使用的关闭 API。这是插件形态的原因,而非可选偏好。

核心功能

手势范围

左键仍选中标签;右键仍打开菜单;中键关闭标签——对停靠在右侧边栏的标签条上的 chip,以及对浮动窗标题条(data-dockkit-float-title)同样生效。README 用示意说明:在「Report × | Guide | Terminal ×」这类标签文字区域中键,效果与点该标签的 × 一致。

关闭路径与保护规则

处理流程(资料原文步骤摘要):

  1. 确认 button === 1 且事件在 [data-sidebar-right-session] 内。
  2. 从按压元素向上找最近的 [data-dockkit-tab],得到 layout tab id。
  3. 若 chip 未绘制 [data-dockkit-tab-close],则不处理——例如唯一停靠的 Guide 无关闭控件,插件拒绝中键,避免无效拦截。
  4. 调用 ctx.sidebarRight.close(tabId):资源清理、registerCloseHandler、最后一标签折叠列、布局 undo 历史等行为与点 × 相同。
  5. preventDefault() 抑制 Chromium 中键自动滚动;stopPropagation() 避免 dockkit 把中键当成选中。
  6. 监听注册在 ctx.effect 中,禁用或卸载插件时监听一并移除。

浮动窗没有 tab chip:中键落在标题区时,插件会触发 kit 自带的关闭按钮路径,等效于点关闭按钮。

明确不做的事

  • 不支持其他按键、手势或快捷键关标签。
  • 不操作后台 Session,只作用于当前前景列可见的 chip。
  • 依赖 dockkit 的 DOM 标记(data-dockkit-tab、data-dockkit-tab-close、data-sidebar-right-session);若未来 DSH 改名,手势会静默失效,不会误关。
  • 中键仍先被浏览器接收,关闭发生在 pointerdown,而非 auxclick;无法变成与原生 chip 完全同层的内置行为。

技术实现上,在 document 上捕获监听是为了抢在 React 18 根容器委托的 onPointerDown 之前执行;仓库含 test/react-delegation.spec.tsx 验证中键不到达 chip 处理函数、左键仍正常。

环境与依赖

根据仓库 package.json:

  • Node:>=22.17.0
  • DSH:>=0.2.1-rc.5 <0.2.2-0
  • 当前包版本:0.1.1(Release 徽章指向 v0.1.1)
  • 客户端注入:@deepseek-ai/dsh-client-ui-sidebar-right

安装与启用

官方 README 给出的方式是从本仓库构建并打包,再在桌面客户端里安装 .tgz,不是凭插件名拼接 CLI 的 dsh plugin add github:... 命令。步骤如下。

  1. 在克隆或解压后的仓库根目录安装依赖并校验构建:
pnpm install
pnpm check                       # typecheck · build · vitest
pnpm pack                        # -> dist/dsh-middle-click-tab-close-0.1.0.tgz

说明:pnpm pack 输出文件名在 README 示例中为 dsh-middle-click-tab-close-0.1.0.tgz;安装时使用 dist/ 下实际生成的 tgz 文件名即可。package.json 中 version 为 0.1.1,打包产物版本以本地 pnpm pack 结果为准。

  1. 在 DeepSeek Harness 桌面应用中打开 Settings → Plugins,安装上述 dist/*.tgz,然后重启应用。资料写明:运行中的 profile 在启动时才算模块解析图,新 bundle 需下次启动才能正确 import entry。Web 客户端在重启后还需刷新页面。

插件无配置界面;安装并重启后即生效。

典型用法

  1. 启动已安装插件的 DSH 桌面客户端并完成一次应用重启与 Web 页刷新。
  2. 在右侧边栏打开若干可关闭标签(如 Report、Terminal 等带 × 的页)。
  3. 在标签文字区域按下鼠标中键:标签应关闭,且与该标签注册的 close handler 行为一致。
  4. 对唯一 Guide 标签中键:应无关闭效果(与无 × 的官方行为一致)。
  5. 若有浮动侧栏窗,在中键点击标题栏区域:窗体应通过 kit 关闭按钮同路径关闭。

开发调试时,可用仓库脚本在隔离 profile 中加载 bundle(不修改本机正式 profile):

scripts/dev-profile.sh boot 19498     # isolated DSH home under .dev-home/
scripts/dev-profile.sh url 19498      # prints the served bundle URL
scripts/dev-profile.sh remove

手势在真实桌面 GUI 上的验证 README 标明需人工确认;自动化测试覆盖 jsdom 行为与 React 委托顺序,不含 live middle click。

适用场景与注意

适合谁: 长期在 DSH 右侧边栏切换文件、终端、交付物等标签,且习惯浏览器式中键关标签的客户端用户。插件星标在资料中为 0,属早期社区工具,使用前可自行浏览源码与 CI 状态。

权限与安全: 插件随当前 DSH 进程与用户 profile 加载,在浏览器上下文中监听指针事件并调用官方 sidebarRight.close。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认接受其 DOM 解析与事件拦截方式。

生态说明: DSH 采用「一切皆插件」的扩展思路;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文安装步骤以仓库 README 为准。

结尾

dsh-middle-click-tab-close 用很小的 browser 半包补上了右侧边栏标签的中键关闭,并刻意对齐官方 sidebarRight.close 而非模拟点击 ×,以便 close handler 与布局历史与内置 UI 一致。若你需要这一手势,可按 README 打包安装并在重启后试用。

  • 插件目录:https://www.skillhub.cn/plugins/icrefin/dsh-middle-click-tab-close
  • 源码与说明:https://github.com/icrefin/dsh-middle-click-tab-close
羽毛球分组比赛记分
小程序二维码

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

Xiaoye