前言¶
DeepSeek Harness (DSH) 官方侧边栏仅支持按工作区分组会话。当同一工作区内存在多个主题时,所有会话会挤在一组,难以按主题拆分。
dsh-session-topics 插件在展示层引入了“话题”轴,将侧边栏渲染为“工作区 → [话题 → 子话题 → 会话] + 未归话题”的结构。它是一个纯客户端插件,不依赖任何 Host 服务,不修改官方数据模型。
核心功能¶
1. 侧边栏层级结构¶
侧边栏展示顺序为:工作区 → 话题 → 子话题 → 会话 → 未归话题。
* 新建话题:每个工作区行右侧有 + 按钮,用于在该工作区内新建话题。
* 话题操作:话题行悬停时显示 +(新建子话题)、✎(重命名)、×(删除)。
* 会话时间:会话行右侧显示相对时间(如“刚刚”、“5 分钟前”),每分钟自动刷新。
* 会话打开:点击会话行可正常打开会话。
2. 拖拽交互¶
本插件接管了官方的拖拽手势,但将排序与归档逻辑分开:
* 调整顺序:将会话拖到另一会话的上/下半,显示插入指示线,用于调整顺序。
* 归入话题:将会话拖到话题标题(含子话题)上,会话归入该话题。
* 移出话题:将会话拖到“未归话题”标题上,会话移出话题回到未归类状态。
* 拒绝跨工作区:跨工作区的拖拽会被直接拒绝。
3. 右键菜单¶
- 会话右键菜单:重命名(内联编辑)、分叉会话、归档会话、移出话题。
- 工作区右键菜单:新建话题、重命名工作区、删除工作区(删除前确认)。
4. 数据持久化¶
展开/折叠状态、话题归属关系全部持久化到浏览器本地存储,刷新页面或重启 DeepSeek Harness 后均会保留。
安装与操作¶
安装¶
在命令行中执行以下命令安装:
dsh plugin --profile web add github:WangXuexin24/dsh-session-topics
临时关闭¶
在插件市场 → 已安装列表中,关闭本插件卡片的“启用中”开关,然后按提示重启 DeepSeek Harness。
再打开¶
在同一开关位置将其打开,并重启 DeepSeek Harness。
卸载¶
在插件市场卡片的“卸载”按钮点击卸载;或使用命令:
dsh plugin --profile web remove dsh-session-topics
升级与验证¶
- 升级本地代码:直接修改项目文件,刷新浏览器页面即可(客户端 bundle 每次加载都重新获取)。
- 验证运行:侧边栏显示“话题”分组结构而非官方纯工作区分组,或运行
node test/smoke.mjs,输出RESULT: all checks passed。
技术实现与限制¶
设计原则¶
- 零依赖:不依赖 Host 的任何服务,不调用子进程,不生成脚本,不修改 host 文件,不注册工具,零 token 成本。
- 接管槽位:插件接管了
sidebar.workspaces槽位(priority: -1),必须实现被替换方的全部操作能力(如会话右键菜单)。 - 数据存储:话题归属存储在浏览器本地(
dsh.session.topics.v2),每次变更会自动备份到dsh.session.topics.v2.bak。若主存储为空而备份存在,侧边栏顶部会出现恢复条。 - 滚动契约:必须遵循官方
ui-workspace的 flex 布局契约(flex:1; min-height:0; flex-direction:column),否则会导致内容无法滚动。
已知限制¶
- 话题层级:当前限制为两层(话题 → 子话题)。虽然可修改
MAX_TOPIC_DEPTH放开限制,但侧边栏宽度可能无法容纳更深嵌套。 - 数据同步:话题归属数据仅存储在当前浏览器本地,不跨设备同步,也不随 Host 进程持久化。
- npm 发布:目前未发布至 npm(可选),仅支持从 GitHub 安装。
参考资源¶
- GitHub 仓库:https://github.com/WangXuexin24/dsh-session-topics
- 社区目录:https://www.skillhub.cn/plugins/WangXuexin24/dsh-session-topics
- 许可证:MIT