前言¶
在 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,界面一直转圈。处理步骤:
- 在插件管理里卸载 dsh-session-tabs;
- 删除遗留目录:
C:\Users\<你>\.dsh\profiles\desktop\node_modules\dsh-session-tabs; - 再用方式 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 为准。