前言¶
在 DSH 桌面端里同时跟进多个工作区时,常见做法是反复在左侧列表里点进点出:当前会话占满中间栏,切走再回来往往要等内容重新加载,跑任务的状态也不一眼能扫到。浏览器里用标签页并行多个页面是习惯,DSH 原生界面却没有同等粒度的「一条会话一个标签」入口。
下面介绍社区插件 dsh-project-tabs(维护者 miao-ge):它在 DSH 桌面端加一排浏览器式项目标签,把 Windows 原生标题栏里「应用 / 编辑」菜单右侧的空白利用起来;非 Windows 或浏览器环境则降级到中栏顶部。一个标签对应一条会话,状态用圆点区分,顺序可拖、重启可恢复,中间正文区域仍走官方布局。
这是什么¶
dsh-project-tabs 是 DeepSeek Harness(DSH)的客户端插件,分类为客户端能力扩展。它不改变左侧工作区列表、右侧 dock、输入框等原版结构,只增加标签栏,并用标签决定「中间那一栏显示哪条会话」。项目托管在 GitHub:miao-ge/dsh-project-tabs;社区目录页:skillhub.cn 插件页。许可证为 MIT(见仓库 package.json)。
核心功能¶
标签与状态¶
一个标签 = 一条 session。标签文字是工作区(项目)标题;左侧状态点表示当前阶段:
| 状态点 | 标签配色 | 含义 |
|---|---|---|
| 转圈 | 品牌蓝底(选中时) | 正在跑 |
| 黄点 | 黄底 | 在等你审批 / 回答 |
| 对勾 | 绿底 + 加粗 | 已经跑完,你还没看过 |
| 灰点 | 中性 | 空闲 |
交互¶
| 操作 | 结果 |
|---|---|
| 点标签 | 切到那条会话 |
| 点标签上的 × / 中键点标签 | 关掉这个标签(不动会话、不动工作区) |
| 拖标签 | 调整顺序 |
| 右键标签 | 关闭 / 关闭其他 / 关闭右侧 / 复制项目路径 |
点 +(紧跟在最后一个标签后面) |
选已有项目,或「选择目录…」开新目录 → 在新标签里打开 |
| 左侧工作区行右键「在新标签中打开」 | 需配合 dsh-sidebar-context-menu |
侧边栏点会话时:若该会话已有标签则跳转;否则在当前标签里打开,不会无限增标签,数量通常与活跃项目同级。
切换体验与保活¶
DSH 0.2.0 里主视图默认只保留一条会话,切走会释放本地 generation,再切回会像冷启动。本插件对每个后台标签额外调用 sessions.retain(id, { source: 'projectTabs' }),保留历史窗口与 tail;在跑标签优先,最多同时保活 MAX_WARM_TABS = 10 个。滚动位置由平台 chatScrollPositions 按 sessionId 恢复。
诚实说明:这是「从热数据重新渲染」,不是 DOM 一直挂着——React 局部状态会复位(例如展开的工具卡片、思考块会收起)。标签列表持久化键为 localStorage 的 dsh.project.tabs.v1,重启桌面端会恢复。
布局适配¶
插件检测 html[data-windows-titlebar]:
- 有(Windows 桌面):标签贴进约 40px 标题栏,避开原生菜单与窗口按钮。
- 没有(macOS 桌面 / 浏览器):中栏顶部 36px 标签栏,并给中栏加
padding-top,卸载时撤销。
对外 API(可选集成)¶
提供客户端服务 projectTabs(另有 window.__DSH_PROJECT_TABS__ 兜底),供侧边栏右键等场景调用:
const tabs = ctx.get('projectTabs') ?? globalThis.__DSH_PROJECT_TABS__;
const sessionId = await tabs.openWorkspaceInTab(workspaceId);
tabs.openSessionInTab(sessionId);
tabs.listTabs(); // [{ id, sessionId }]
未装 dsh-sidebar-context-menu 时,本插件可独立使用。
安装与启用¶
推荐用 DSH 自带插件安装器(desktop profile):
dsh plugin --profile desktop add dsh-project-tabs
也可在桌面端界面:左侧栏「插件」→「添加插件」→ 填包名 dsh-project-tabs → 安装 → 立即启用。
开发从源码安装需克隆仓库后执行 scripts/install.ps1(默认 desktop profile;-Profile web|both、-Uninstall 等见 README)。客户端改完硬刷新即可;宿主改完需重启桌面端。运行环境要求 Node >=20(见 package.json 的 engines)。
典型用法¶
- 安装并启用后,在 Windows 桌面端标题栏或中栏顶部看到标签栏与末尾的
+。 - 点
+选择已有工作区或新目录,在新标签打开对应会话。 - 多任务并行时看状态点:黄点表示待审批,转圈表示运行中,对勾表示已完成未读。
- 需要固定顺序时拖动标签;临时收起界面点 × 关标签,不删除底层会话。
- 若已装 dsh-sidebar-context-menu,在工作区行右键「在新标签中打开」更快。
切标签本质是 ctx.uiWorkspace.openSession(sessionId),与官方「当前显示会话」模型一致。
适用场景与注意¶
适合:同时在多个仓库 / 工作区之间切换、希望标题栏一眼看到各会话运行与审批状态、希望重启后恢复标签顺序的 DSH 桌面端用户。
限制(README 已说明):
- 左侧工作区列表全局共享;右侧面板跟当前会话。
- 切换标签后工具卡片展开状态会复位。
+菜单会列出全部工作区,项目很多时列表较长(会按视口夹取)。- 桌面壳未开放 iframe / 多窗口式「真·多页面」,插件在保真度与内存之间选了「官方外壳 + 热数据重渲染」。
安全与权限:插件在当前 DSH 进程权限下运行,安装前建议阅读 源码 与 MIT 许可证,确认符合你的环境策略。DeepSeek Harness 社区插件目录(如 skillhub.cn)是独立生态站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。
结尾¶
dsh-project-tabs 把浏览器式多标签搬进 DSH 桌面端标题栏(或中栏顶栏),用会话级标签和状态点管理多项目,并在不替换官方会话外壳的前提下尽量保持切回时的热数据体验。进一步了解可访问 社区目录页 与 GitHub 仓库。