dsh-session-tabs:在 DSH Web GUI 顶部用浏览器式标签切换会话

前言

在 DSH(DeepSeek Harness)里做多会话、多项目开发时,默认要靠左侧栏在会话之间跳转:侧栏一直占宽度,切换时还要展开列表,在几十行里找目标会话。这和常见浏览器里「顶部一排标签、一眼点到」的习惯相反,正文区域也容易被侧栏挤窄。

下面介绍的 dsh-session-tabs 是一条钉在窗口标题栏下方的整宽标签栏:一个标签对应一个会话,同一工作区(项目)下的会话收在可折叠的框里。装好后可以收起侧栏,用抬头点标签的方式切会话,正文更宽。

这是什么

dsh-session-tabs 是 DSH 的纯客户端插件(分类:客户端),给 Web GUI 增加浏览器式顶部 Session 标签栏。维护与源码见 GitHub 仓库 P-PPJ/dsh-session-tabs(README 与安装包发布链路与 1834395550/dsh-session-tabs 一致);社区目录页:SkillHub · dsh-session-tabs。

插件不改动服务端对话数据:× 只关标签不删会话,卸载后界面可立即恢复。许可证为 MIT(见仓库 LICENSE);package.json 中当前版本为 1.0.2,要求 DSH >=0.2.0-rc.1 <0.3.0-0,且仅支持 Web 平台(dsh.client.platform = "web"),无 TUI 版本。

核心功能

标签栏与布局

  • 整宽标签栏固定在窗口标题栏正下方(约 38px 高),界面整体为标签栏让出空间,不遮挡官方 UI。
  • 一个标签 = 一个会话:当前会话为浅蓝胶囊并加粗;该会话的 agent 正在输出时,标签前有呼吸式蓝点。
  • 标签按需出现:只有真正打开过的会话才会进标签栏,按打开顺序排列;对话持续输出时标签不会左右乱跳。
  • 标签过多时在标签条上滚轮横向滚动,两侧渐隐提示还有内容;单标签宽度上限 200px(CSS 变量 --st-tab-max),超长标题截断为 …。

按项目分组与折叠

  • 每个工作区一个带边框的圆角框,框头为 ⌄ 项目名 + 标签数;点击框头可折叠,折叠后显示为 › 项目名 N,状态写入 localStorage,刷新或重启后仍保持。
  • 当前会话在别处被切换(侧栏、快捷键、深链)时,其所在项目框会自动展开。

关闭、新建与侧栏

  • 悬停或当前标签上的 ×、或中键点击标签:只关闭该标签,不删除会话;关掉当前标签会自动切到相邻标签;只剩一个标签时不显示 ×,避免把标签栏关空。
  • 标签栏最右侧 +:在当前项目新建会话(调用 uiWorkspace.startSession())。
  • 可见性规则与官方侧栏一致:隐藏子代理会话、非当前的空会话、已归档会话。

实现要点(便于评估)

  • Host 半边为空,无构建步骤:index.js + client.js 为可运行 ESM;渲染座位为 shell.overlay,用固定定位与 :has() 规则为框架顶出标签栏高度。
  • 数据来自客户端服务:sessions.list、workspaces.list、uiWorkspace.openSession(id) 等;停用或卸载时会移除注入样式与根属性,界面立刻复原。

安装与启用

前提:已安装 DSH,并能在 Web GUI 中管理插件。装完一般不需要重启,标签栏会出现在标题栏下方。

README 说明:在 DSH 插件市场(dsh-market)搜 session tabs 可一键安装(收录申请在 awesome-dsh-plugin 队列中);在市场正式收录前,可用下列方式。

方式 A:从 Release 安装(推荐,不需要 Git)

在 DSH 插件管理里填写安装地址:

https://github.com/1834395550/dsh-session-tabs/releases/latest/download/dsh-session-tabs.tgz

该地址指向最新 Release;若需固定版本,可改为例如:

https://github.com/1834395550/dsh-session-tabs/releases/download/v1.0.2/dsh-session-tabs-1.0.2.tgz

方式 A-2:github.com 连不上时(jsDelivr)

https://cdn.jsdelivr.net/gh/1834395550/dsh-session-tabs@main/dsh-session-tabs.tgz

@main 约有 12 小时缓存;也可把 @main 换成具体提交哈希,或改用方式 A。也可将 .tgz 下载到本地,在插件管理里填写文件的绝对路径离线安装。

方式 B:从 GitHub 仓库安装(需要本机 Git)

github:1834395550/dsh-session-tabs

若报 ERR_PNPM_GIT_RESOLVE_FAILED 且提示找不到 git,需安装 Git 或改用方式 A / A-2。

方式 C:从本地目录安装

将仓库放到本机任意目录,在插件管理里填写该目录的绝对路径(README 注明需自行克隆仓库;本文不展开 clone 步骤)。

Windows:从方式 C 改回网址安装失败时

若曾用本地目录或 link: 安装,再改用方式 A / A-2 可能在最后一步出现 [ERR_PNPM_EPERM] ... rename ... dsh-session-tabs,界面一直转圈。处理步骤:

  1. 在插件管理里卸载 dsh-session-tabs;
  2. 删除遗留目录:C:\Users\<你>\.dsh\profiles\desktop\node_modules\dsh-session-tabs;
  3. 再用方式 A 或 A-2 的地址安装。

典型用法

操作 效果
点标签 切换到该会话
悬停 / 当前标签上的 × 关闭标签(不删会话)
中键点标签 同上
点 ⌄ 项目名 折叠 / 展开该项目下的标签
点最右侧 + 在当前项目新建会话
在标签条上滚轮 横向滚动

习惯浏览器多标签的用户可以把侧栏收起,用顶部标签在多个会话间切换;项目很多时折叠不关心的工作区,只保留当前项目的框展开。

适用场景与注意

适合:长期在 DSH Web GUI 里并行多个会话、多个工作区,希望减少侧栏占用、用顶部标签快速切换的开发者。

限制与环境(来自 README「已知限制」):

  • 主要在 DSH 桌面端(Windows,页面带 data-windows-titlebar)验证;纯浏览器窗口无原生标题条时,标签栏贴在窗口顶部,仍可用。
  • 至少保留一个标签;只支持 Web,没有 TUI。

安全与权限:插件在当前 DSH 进程权限下以纯客户端脚本运行,会读写浏览器 localStorage 并调用 DSH 客户端 UI 服务。安装前应阅读仓库源码与 MIT 许可证,确认来源可信;勿安装未核对过的第三方打包地址。

结尾

dsh-session-tabs 把「开着的会话」收成标题栏下的一排标签,把「项目」收成可折叠框,在不大改 DSH 官方布局的前提下,用更接近浏览器的方式管理 Session。需要安装包直链、jsDelivr 镜像或 Windows 卸载残留说明时,以仓库 README 为准。

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

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

小夜