前言¶
在 DeepSeek Harness(DSH)里同时开多个会话时,常见做法是在侧栏或列表里点选切换。会话一多,当前在看哪一条、哪条在跑、哪条在等你回复,都要靠记忆和反复滚动侧栏。浏览器里用标签页管多个页面是成熟习惯;DSH 官方界面默认并没有把「主视图里的会话」做成一排可切换的标签。
下面介绍社区客户端插件 dsh-tab(npm 包名 dsh-tab,维护者 imchangchang):在 DSH 会话列顶部加一排书页式标签,一个会话一个标签,切换走官方接口、不整页刷新,并支持工作区角标、固定、关闭、归档与拖拽排序。插件基于官方 DSH slots、services 与主题 token 实现,分类属于 客户端。
这是什么¶
dsh-tab 给 DeepSeek Harness 的主会话区增加浏览器风格的会话标签栏:打开、恢复或新建会话时自动入签;点击标签通过官方 uiWorkspace.openSession 切换,当前标签与会话页在视觉上连成「一张纸」的书页效果。
宿主侧 index.js 仅负责让 DSH 识别包;标签栏、菜单、拖拽与布局样式在浏览器半 client.js 中实现,由 DSH 直接加载,没有单独构建步骤。许可证为 MIT;当前 npm 版本为 0.2.0(以 package.json 为准)。开发与验证环境标注为 DSH 0.2.1-rc.5 附近的桌面版与 Web GUI。
核心功能¶
以下能力均来自项目 README 说明。
标签与会话¶
- 一个会话对应一个标签;切换不刷新整页。
- 最后一个标签右侧有
+新建会话;标签过多时标签条横向滚动,+始终可见。 - 标签左上角显示所属工作区(颜色由工作区 ID 哈希,文字为工作区名,悬停可看全名);固定为仅图标模式时使用更小字号。
固定、排序与关闭¶
- 固定:固定标签排在最左,宽约 40px、只显示图标并带状态点,与普通标签之间有分隔线;右键可固定或取消固定。
- 拖拽排序:按住标签左右拖动换位,落点有强调色竖线;固定组与普通组各自组内排序,顺序写入
localStorage,刷新后保持。Esc或窗口失焦可取消本次拖拽。 - 关闭:标签上的
×、鼠标中键,或右键菜单(关闭 / 关闭右侧 / 关闭其他 / 关闭全部)。关闭标签不等于删除会话。 - 归档:右键「归档会话」,走官方
uiWorkspace.archiveSession;会话正在运行或等待回复时会先确认是否「停止并归档」。
状态与交互¶
- 状态点:蓝色呼吸 = 正在运行;黄色 = 等你回复;绿色 = 有新的完成内容。
- 键盘:标签获得焦点时
←/→切换相邻标签并激活;右键菜单中Esc关闭菜单。 - 主题:颜色使用
--dsw-alias-*token,随 DSH 浅色 / 深色主题变化。
切换时序¶
切换标签时会先跑约 140ms 的宽度过渡,动画结束后再切换会话内容(避免与官方切会话时的同步重渲染抢在同一帧)。因此内容切换比点击晚约 150ms;可在 client.js 顶部调整或关闭 SELECT_COMMIT_DELAY。
安装与启用¶
环境要求:DSH 桌面版或 Web GUI,版本在 0.2.1-rc.5 附近(详见仓库「兼容性」一节)。
从 npm 安装(推荐):在 DSH 中让 Agent 执行:
plugin_manager install_bundle target=dsh-tab
也可先下载包再安装:
npm pack dsh-tab
(或在 npmjs.com/package/dsh-tab 下载 tgz,再按 DSH 本地包安装方式处理。)
安装后刷新窗口(macOS 上为 Cmd+R)生效。安装或升级后,建议在设置里确认依赖版本为刚安装的发布版本。
从源码安装:将克隆得到的 dsh-tab 目录作为本地插件——设置 → 插件 → 添加插件,选择该目录;或执行:
plugin_manager install_bundle target=<dsh-tab 的绝对路径>
插件以当前 DSH 进程权限在客户端运行;安装前请自行查看 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。
典型用法¶
| 操作 | 方式 |
|---|---|
| 切换会话 | 左键点击标签 |
| 关闭标签页 | 标签 × / 中键 / 右键菜单 |
| 新建会话 | 最后一个标签右侧 + |
| 调整顺序 | 同组内按住标签拖拽 |
| 固定 / 取消固定 | 右键 → 固定标签页 / 取消固定标签页 |
| 批量关闭 | 右键 → 关闭右侧 / 关闭其他 / 关闭全部 |
| 归档 | 右键 → 归档会话 |
| 键盘 | 标签聚焦时 ← / → |
标签顺序与固定状态保存在浏览器 localStorage 键 dsh.tab.view.v2(结构为 { tabs, pinned });旧键会自动迁移。这些数据不上传、不发网络请求;工作区角标仅读取官方工作区标题。
适用场景与注意¶
适合:经常在 DSH 主视图并行维护多个会话、希望用标签快速切换且保留工作区归属信息的开发者或日常用户。
兼容性边界(README「已知边界」与「兼容性」):
- 帧布局与官方 DOM 标记(如
data-shell-bottom、data-shell-overlay)耦合;若官方调整三行 frame 结构,标签栏可能回退到三栏下方,需更新插件中的FRAME_CSS。 - 拖拽不能跨固定组与普通组;拖到边缘时标签条不会自动滚动。
- 未实现全局快捷键(如
⌘T/⌘W等);主要在 macOS 桌面版与 Chrome 系 Web GUI 上验证,其他平台未测试。
DeepSeek Harness 生态强调「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-tab 把 DSH 主视图里的会话收成一排可固定、可排序、带工作区角标的书页式标签,切换与会话生命周期仍走官方 workspace 接口,本地只持久化标签顺序与固定状态。