dsh-pinned-session-bar:侧边栏置顶会话集中栏

前言

在 DSH Web GUI 里,会话可以置顶(pin),置顶项会出现在各 workspace 分组列表的顶部。当置顶会话变多,它们仍然分散在各自分组里,和「我想一眼看到所有置顶、快速切换」的习惯并不一致。官方列表行为不会被这个插件替换;它只是在 workspace 列表上方增加一条独立的 Pinned 栏,把 Host 里已持久化的置顶集合集中展示,并支持与工作区列表之间的拖放。

下面介绍维护者 YubaiLoving 发布的客户端插件 dsh-pinned-session-bar(GitHub:YubaiLoving/dsh-pinned-session-bar),分类为客户端,适用于带浏览器界面的 DSH Web GUI。

这是什么

dsh-pinned-session-bar 是 DeepSeek Harness(DSH)Web GUI 的客户端插件:在侧边栏 workspace / 会话列表正上方挂载一条 Pinned 栏,读取 Host 持久化的置顶集合(ctx.workspaces.list → pinnedSessionIds),集中列出所有置顶会话,并支持栏内排序、栏与列表之间的跨容器拖放。

内置会话列表保持原样——置顶行仍出现在各 workspace 分组顶部;Pinned 栏是额外的汇总视图,不是替代官方列表。

核心功能

置顶集中展示

插件从 Client 服务 ctx.workspaces / ctx.sessions 读取数据,在 [data-slot="sidebar.workspaces"] 节点之前通过 Portal 渲染栏位。栏内每一行对应当前 profile 下已 pin 的 session。

跨容器拖放

拖放协议与官方浏览器行一致(原生 HTML5 DnD),因此可以在栏与工作区列表之间移动:

  1. 从工作区列表把 session 行拖到栏上 → 调用 ctx.workspaces.pinSession,新置顶项排在栏内最前。
  2. 从栏拖回工作区列表 → 调用 ctx.workspaces.unpinSession。
  3. 拖拽悬停在栏上时,栏会显示 accent 描边和 “release to pin” 提示。

拖回列表只取消置顶;行在列表中的具体落点仍由官方 ui-workspace 的排序规则决定。

栏内排序与「新置顶靠前」

栏内顺序保存在浏览器 localStorage 键 dsh.pinnedBar.order.v1。可在栏内上下拖动调整顺序。从未在栏内排过序的新置顶 session 会跳到栏最前,与 DSH「置顶会把 session 移到前面」的语义一致;已手动排过序的行保持相对顺序。

交互细节

  • 当前会话高亮:与官方列表相同规则(retainedBy.mainView > 0,全局 panel 打开时不高亮),并设置 aria-current。
  • 取消置顶:行 hover 时出现 ✕ 按钮,效果等同拖出栏。
  • 打开会话:点击行,或 Enter / Space。
  • 折叠:点击栏标题折叠;状态保存在 localStorage: dsh.pinnedBar.collapsed.v1。
  • 窄侧栏:侧边栏收起到 56px rail 时,通过 container query 隐藏栏;此状态下无法拖放。

安装与启用

插件以当前 DSH 进程权限运行。安装前建议在 GitHub 查看源码与 MIT 许可证,确认符合你的环境策略。

从 GitHub 安装(推荐)

在 DSH 中执行:

plugin_manager install_bundle target="github:YubaiLoving/dsh-pinned-session-bar"

也可在 Web GUI 的 Plugins 页面粘贴同一 spec。DSH 会安装包、启用 bundle,刷新页面后栏位出现。

手动安装

  1. 将包放到 profile 的 node_modules:
~/.dsh/profiles/<profile>/node_modules/dsh-pinned-session-bar/
  1. 在 cordis.patch.yml 增加 loader 行,或在 profile 的 dsh.profile.bundles 中声明:
- insert:
    - id: ui-pinned-bar
      name: 'dsh-pinned-session-bar'
  1. 刷新页面;若仍无栏位,再重启 DSH。

环境要求(来自 README):带浏览器 surface 的 DSH Web GUI(@deepseek-ai/dsh-web-app);package.json 声明 dsh 引擎 >=0.1.7-rc.2,开发与验证针对 DSH 0.2.0-rc.2。插件依赖 [data-slot="sidebar.workspaces"] 与 [data-row-key^="session:"] 两处 DOM 约定。

典型用法

安装并刷新后,无需额外配置即可使用:

  1. 在工作区列表中,将某 session 行拖到上方 Pinned 栏 → 该会话被 pin 并出现在栏内。
  2. 在栏内拖动行调整你习惯的置顶顺序(仅本浏览器保存)。
  3. 点击栏内某行打开对应 session;需要取消置顶时,hover 点 ✕,或拖回下方工作区列表。
  4. 会话较多时,点击栏标题折叠 Pinned 区域,给列表留出空间。

适用场景与注意

适合:长期在 DSH Web GUI 中维护多个 agent / workspace,且经常 pin 若干会话以便快速切换的开发者。希望置顶与会话列表分区展示、又不想改官方列表行为时,这条栏是增量 UI。

已知限制(README 原文):

  • 依赖上述 DOM 选择器;未来 DSH 若变更 slot 或 row key,插件需更新匹配逻辑。
  • 栏内顺序仅浏览器本地,与官方列表的手动排序(ui-workspace 视图 store)相互独立。
  • 侧栏 rail 模式下栏隐藏,拖放不可用。

DeepSeek Harness 生态强调「一切皆插件」;社区目录站点(如 SkillHub)与 DeepSeek / 幻方无官方从属关系,本插件来自社区维护者 YubaiLoving,当前 GitHub 星标为 0,版本 1.0.0。

链接

  • 社区目录页:https://www.skillhub.cn/plugins/YubaiLoving/dsh-pinned-session-bar
  • 源码与说明:https://github.com/YubaiLoving/dsh-pinned-session-bar
羽毛球分组比赛记分
小程序二维码

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

小夜