dsh-session-row-actions:侧栏会话行悬浮按钮可配置

前言

在 DeepSeek Harness(DSH)里,工作区侧栏会列出大量会话。鼠标悬停在某一行时,行尾会出现一排快捷操作;其中不少能力藏在「…」菜单里,需要多点一次。官方把各按钮的 order 写死在行组件里,没法按个人习惯把「归档」「分叉」等菜单项提到悬浮条上,也没法调整它们的出现顺序。

下面介绍社区客户端插件 dsh-session-row-actions(维护者 railgun20001):用可勾选、可拖拽的配置,重绘悬停时的那一排按钮;行上右键仍可打开官方完整菜单。配置入口在「插件管理 → 本插件详情页」,不在「设置 → 通用」。

这是什么

dsh-session-row-actions 是 DSH 的 web 客户端半插件(@deepseek-ai/dsh-client-ui-workspace 注入,immediately: true)。当前 npm 包版本为 0.5.1,许可证 MIT,GitHub 星标为 0(以仓库页面为准)。

它解决的是侧栏 会话行尾悬浮操作区 的展示与顺序问题:官方「…」菜单里的动作可以勾选成悬浮按钮并排好序;默认勾选「归档」「分叉」。简介里提到的「置顶会话换成分叉会话」指的是:在可配置的悬浮条里,你可以用「分叉」等菜单动作替代原先行尾那套固定布局,而不是删除官方菜单里的「置顶」——置顶、重命名仍通过官方菜单条目触发。

核心功能

悬停条与右键菜单的分工

悬停一行会话时,行尾显示的是你配置的那排按钮。默认示例(README)如下:

悬停一行会话  →   (…)  归档会话  分叉会话        ← 默认:只勾了「归档」「分叉」
在行上右键    →   官方「…」菜单(置顶 / 重命名 / 分叉 / 归档 / 复制 Session ID)

「更多(…)」在悬浮列表里 位置固定:永远在第一行、也永远在悬浮条最前,不能拖动也不能从列表移除,只有勾选框控制显隐(单独存为 moreVisible)。列表下方说明:在会话行上点右键也能打开同一套菜单。

插件管理页的两个列表

路径:插件管理 → 会话行悬浮按钮(本插件详情页)。界面是两个 各自独立排序 的列表:

列表 内容 操作
悬浮按钮 第一行固定是「更多(…)」,其余是已勾选的动作 「更多」只可切显隐;其余可拖动排序、取消勾选即移出
更多菜单 置顶 / 重命名 / 分叉 / 归档 / 复制 Session ID(不含「更多」) 勾选即加入悬浮按钮;拖动只影响这个列表

要点:

  1. 两个列表的数据分别是 hoverOrder 与 menuOrder,拖动一个不会改动另一个。
  2. 勾选时按 menuOrder 的相对位置插入 hoverOrder;之后可在悬浮列表里再拖。
  3. 菜单列表的排序 不会 改变系统自带菜单的排列。

实现上做了什么(便于排查问题)

插件通过样式隐藏官方插槽里的默认按钮,再按配置渲染整排;官方「更多」触发器收成 0 宽但留在 DOM 里,作为菜单锚点。右键用 window 捕获 mouseup(button 2)去点官方触发器,避免本应用里 contextmenu 不可靠以及菜单被遮罩立刻关掉的竞态。

  • 置顶 / 重命名:打开官方菜单再点对应条目(uiWorkspace 未直接暴露这两项 API)。
  • 分叉 / 归档 / 复制 Session ID:调用 uiWorkspace.forkSession、archiveSession / unarchiveSession、navigator.clipboard 等已有契约。

偏好保存在浏览器 localStorage 键 dsh-session-row-actions/prefs-v4({ menuOrder, hoverOrder, moreVisible }),改完即时生效,无需重启;v1–v3 旧数据会自动迁移。

插件作者记录的两条插槽契约值得留意:侧栏行动作插槽须用 ctx.slots.inject 而非过早 register;所有注册包在 try/catch 里,避免 apply 失败导致整窗无法启动。

安装与启用

DSH 生态按「一切皆插件」组织;SkillHub 是社区目录站点,与 DeepSeek / 幻方无官方从属关系。该插件在目录页的「发送给 DeepSeek Harness 安装」会给出一段自然语言指令,大意是:

请安装 DSH 插件 railgun20001/dsh-session-row-actions。

把目录页上的 完整 安装说明复制给当前 Harness 会话,或按你本地 DSH 已支持的插件安装方式添加 railgun20001/dsh-session-row-actions(README 与 package.json 未给出单独的 shell 一行命令,请勿自行拼接未在文档出现的 dsh plugin add 参数)。

启用后,在 插件管理 打开本插件详情页即可看到「会话行悬浮按钮」配置区块(keyed 插槽 plugins.bundle.config,包名 dsh-session-row-actions)。

典型用法

  1. 打开 插件管理 → dsh-session-row-actions → 会话行悬浮按钮。
  2. 在 更多菜单 列表勾选希望出现在悬停条上的动作(例如「复制 Session ID」)。
  3. 在 悬浮按钮 列表拖动已勾选项,调整悬停时的从左到右顺序;不需要「…」时取消「更多」的勾选(仍可右键出菜单)。
  4. 回到侧栏,悬停任意会话行,确认行尾按钮与配置一致;在行上 右键,确认官方五项菜单齐全。

维护者在 2026-10-23 的验证记录:本地 node test/client-half-test.mjs 通过工厂、插槽、两个列表、勾选、排序、分叉权限与 v1 迁移;隔离 profile 下浏览器中配置即时生效,默认悬浮条为「归档」「分叉」。

仓库自测命令(开发或审源码时):

node test/client-half-test.mjs

要求 Node >= 20(见 package.json 的 engines)。

适用场景与注意

适合谁:长期在 DSH web 客户端管理大量会话、希望把常用动作固定在悬停条、并保留官方菜单与确认弹窗(置顶、重命名)的开发者。

注意:

  • 本插件是 客户端模块,在浏览器侧运行,读写本地 localStorage;不 import Harness 客户端包,只依赖主题令牌与 DOM 稳定标记,DSH 大版本升级后若侧栏 DOM 或插槽变更,可能需要等插件更新。
  • 插件与当前 DSH 进程/浏览器上下文 同等权限;安装前应阅读 GitHub 源码 与 MIT 许可证,确认可接受后再启用。
  • 问题反馈可走仓库 Issues。

结尾

dsh-session-row-actions 把侧栏会话行悬停操作从固定布局改成可配置的一排按钮,并用右键保留官方「…」菜单完整能力;配置集中在插件详情页,改完即生效。

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

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

小夜