前言¶
在 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),因此可以在栏与工作区列表之间移动:
- 从工作区列表把 session 行拖到栏上 → 调用
ctx.workspaces.pinSession,新置顶项排在栏内最前。 - 从栏拖回工作区列表 → 调用
ctx.workspaces.unpinSession。 - 拖拽悬停在栏上时,栏会显示 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,刷新页面后栏位出现。
手动安装¶
- 将包放到 profile 的
node_modules:
~/.dsh/profiles/<profile>/node_modules/dsh-pinned-session-bar/
- 在
cordis.patch.yml增加 loader 行,或在 profile 的dsh.profile.bundles中声明:
- insert:
- id: ui-pinned-bar
name: 'dsh-pinned-session-bar'
- 刷新页面;若仍无栏位,再重启 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 约定。
典型用法¶
安装并刷新后,无需额外配置即可使用:
- 在工作区列表中,将某 session 行拖到上方 Pinned 栏 → 该会话被 pin 并出现在栏内。
- 在栏内拖动行调整你习惯的置顶顺序(仅本浏览器保存)。
- 点击栏内某行打开对应 session;需要取消置顶时,hover 点
✕,或拖回下方工作区列表。 - 会话较多时,点击栏标题折叠 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