seekerwxy/dsh-session-tabs ↗★ 0
dsh-session-tabs
Browser-style session tab bar for DeepSeek Harness (DSH): one tab per opened session at the very top of the web app — click to switch, close, and start new sessions.
AI Analysis
核心用途是提供多会话并行的标签页切换体验。适合需要同时处理多个任务、频繁在不同会话间切换的高频用户。
Install
This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗
README
Read the full README ↗dsh-session-tabs(DSH 会话标签页)
浏览器式会话标签页导航栏 for DeepSeek Harness (DSH)(DeepSeek 官方开源编码代理框架)。
在 DSH Web 界面最上方新增一条导航栏:每打开一个会话就多一个标签页 —— 像浏览器 / opencode 那样点击切换、关闭、新建。当前会话高亮,运行状态一目了然。
A browser-style session tab bar for DeepSeek Harness (DSH): every session you open becomes one tab at the very top of the app — click to switch, close per-tab, and start new sessions, just like a browser or opencode.
Features / 功能
- 顶部全宽固定导航栏(34px,通过
#rootpadding 预留空间,不遮挡原有侧边栏/会话头部) - 每个打开的会话一个标签页(按打开顺序,MRU)
- 当前会话高亮(品牌色下划线,
data-active) - 状态点:运行中(品牌色脉冲)/ 等待交互(琥珀)/ 已完成(绿)
- × 关闭标签:关闭当前标签自动切到相邻标签;全部关闭回到空状态
- + 新建会话(
workspaces.startSession()) - 标签过多时横向滚动(隐藏滚动条)
- 主题感知:使用 DSH 主题 token(
--dsw-alias-*),亮/暗色自动适配,prefers-reduced-motion降级 - 纯客户端实现,无 Host 依赖,无持久化写入
Install / 安装
方式一:动态插件(推荐,已实测 ✅)
在任意 DSH 会话中让 Agent 使用 cordis_define / cordis_run 工具:
cordis_define:plugin.kind: "new",idPrefix: "tabs",把plugin/client.js中apply(ctx) { ... }的函数体粘贴为 Client half(外层写成return { apply(ctx) { ... } })。cordis_run激活,在页面批准即可。插件停止后样式与界面自动完全移除。
方式二:部署级安装(dsh.client 包,重启后仍生效 ✅)
lib/client.js 是预构建的客户端 bundle(__ModuleLoader__.load 格式,与已安装的社区插件一致),package.json 声明了 dsh.client 与 exports["./client"]。以本机 web profile 为例:
- 将本仓库加入 profile 依赖(
/profiles/web/package.json):"dsh-session-tabs": "link:E:/.../dsh-session-tabs" - 在 profile 的
cordis.patch.yml插入插件行:- insert: - id: dsh-session-tabs name: dsh-session-tabs - 在 profile 目录执行
pnpm install,然后重启 DSH —— 之后每次启动标签栏自动加载,无需批准、无需重新定义。
How it works / 原理
- 席位:注册到
shell.overlay—— 唯一"全幅、可叠加、默认点击穿透"的槽位,不替换任何出厂 UI;渲染position: fixed的顶部导航栏。 - 数据:槽位标准钩子
useSessions(SessionListState:current+byId[].displayTitle/running/pendingInteraction/completed);标签顺序 = 本页面会话内"打开过"的会话(MRU)。 - 动作:切换
sessions.open(id);关闭最后一个sessions.clear();新建workspaces.startSession()。 - 空间预留:包内样式
#root { padding-top: 34px; box-sizing: border-box }(动态版随插件停止自动移除;部署版以data-plugin-css守卫按包注入一次)。
License / 许可
MIT © 2025 seekerwxy