@qt4798/dsh-sidebar-groups
v1.0.2
Published
DSH web GUI sidebar enhancement: a toggle button between the workspace search and the view-options (sort) controls switches the sidebar into a grouped view — single-project dropdown plus Pinned/Today/Yesterday/Older accordions — and adds hover actions (pi
Maintainers
Readme
@qt4798/dsh-sidebar-groups
给 DeepSeek Harness Web GUI 的标准对话页面侧边栏加一个可切换的分组视图插件。
在工作区区头的搜索和排序中间新增一个切换按钮,点击后将侧边栏切换为 单个项目下拉 + 置顶/今天/昨天/更早 四组手风琴的展示;每个会话行 右侧悬停显示 置顶/生成标题/修改备注/归档 四个小按钮。
状态(置顶、备注、选中项目、显示模式)全部持久化在 host 端:同一台 DSH 主机下的所有设备(桌面 Web、移动端抽屉)自动同步。
截图
分组视图总览 —— 区头切换按钮(搜索与排序之间)、项目下拉(标题 + 地址)、置顶/今天/昨天/更早 手风琴:

项目下拉展开 —— 每个项目显示标题 + 完整地址,底部"未分组"虚拟桶,当前项带 ✓ 高亮:

会话行悬停操作 —— 悬停时右侧浮现 置顶/生成标题/修改备注/归档 四个动作按钮;运行中的会话行前置旋转加载动画 + 脉冲描边:

功能
| 区域 | 功能 |
| --- | --- |
| 切换按钮 | 位于工作区区头"搜索"和"排序(视图选项)"之间,点击在 原生视图 ↔ 分组视图 之间切换。深色/浅色/自定义主题自动跟随。 |
| 项目下拉 | 顶部单个项目下拉切换,每个项目显示 标题 + 项目地址,底部包含"未分组"虚拟桶。菜单通过 position: fixed 渲染进 body,绝对不放裁剪;滚动窗口时自动跟随重定位。 |
| 未分组 | 收纳不属于任何已注册工作区的会话(虚拟桶,无实际目录)。选中后正常浏览,不提供新建会话入口(新建必须有目录)。 |
| 分组手风琴 | 选中项目的会话按 置顶 / 今天 / 昨天 / 更早 四组展示(按 updatedAt 分日;置顶会话在置顶组和原时间组双显示)。每组可折叠。 |
| 会话行按钮 | 默认完整显示会话标题(支持换行),悬停时标题省略、右侧浮现四个动作按钮:• 置顶(Pin)—— 已置顶的会话在时间分组里右侧常驻实心图钉、置顶组内隐去• 生成标题(Regenerate)—— 调用官方 sessionTitle.refresh,显式重生成覆盖自动标题• 修改备注(Edit note)—— 行内编辑备注文本• 归档(Archive)—— 复用 DSH 原生归档接口 |
| 左侧选中条 | 只有当前打开的会话左侧显示一条笔直的 3px 主题色竖条,点击切换后条跟随移动。 |
| 运行中动画 | 正在执行任务的会话行左侧显示旋转加载动画,整行呼吸脉冲描边。 |
| 消息统计 | 每行下方显示"X 前 · N 条消息"(会话级 user + assistant 消息总数,pi-web 风格语义)。Host 侧实时统计。 |
| 搜索联动 | 分组视图下区头的搜索关键字会即时过滤手风琴中的会话标题。 |
| 多端同步 | 置顶 / 备注 / 选中项目 / 视图模式 存 host(~/.dsh/sidebar-groups/state.json),客户端每 5s 轮询 + 聚焦时刷新 + 本地操作后立即刷新。 |
| 移动端 | 同一套注入在移动端侧边栏抽屉(dsh-client-ui-mobile-adapt)内同样生效;触屏设备按钮常显。 |
| 样式隔离 | 所有 class 使用 dsg-* 前缀,配色全部走 DSH 官方 --dsw-alias-* 主题 token,不破坏任何已有插件(data-plugin 标记 + 反认领自愈)。 |
安装
# 推荐:从 npm 一键安装
dsh plugin --profile web add @qt4798/dsh-sidebar-groups@latest
# 本地开发(link 安装)
dsh plugin --profile web add link:/path/to/dsh-sidebar-groups装完完整重启 dsh web,打开标准对话页面,工作区侧边栏区头的搜索和排序中间即出现切换按钮。
要求
dsh >= 0.1.1-rc.1。
更新日志
版本记录见 CHANGELOG.md。
开发
pnpm install
pnpm build # tsc 声明 + tsdown 构建 → lib/index.js + lib/client.js
pnpm typecheck # 类型检查架构
src/
├── index.ts # host 半区(cordis 插件)
│ # - SidebarGroupsStore(JSON 持久化、串行变更队列、防抖原子写)
│ # - /api/sidebar-groups/* 路由(state / pin / note / select / view-mode / prune / title-regenerate / counts)
│ # - title-regenerate 调官方 sessionTitle.refresh
└── client/
└── index.tsx # client 半区(浏览器闭包产物)
# - DOM 注入切换按钮(锚点 aria-label="视图选项" / "View options",中英文通用)
# - React 渲染分组视图(portal 下拉、手风琴、会话行、悬停按钮)
# - 订阅 ctx.sessions.list / ctx.workspaces.list(实时同步原生浏览器)
# - 样式标签预带 data-plugin + 反认领(防 HMR 卸载误删其它插件样式)License
MIT
