dsh-tab:给 DSH 会话区加书页式标签页

前言

在 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 接口,本地只持久化标签顺序与固定状态。

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

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

小夜