Better Session Title 工作区下拉展示

GitHub release UI enhancement plugin Windows | macOS | Linux MIT License

简体中文 · English

把 DSH 顶栏的会话标题换成「工作区 / 会话」两级面包屑,切换入口直接放在顶栏

dsh plugin --profile web add github:xinspark/dsh-better-session-title#v1.0.0

Better Session Title 是面向 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的**会话顶栏增强插件**——纯 UI 增强,不引入新能力,不改任何系统源码。DSH 原生顶栏中央只显示会话标题(层级面包屑),工作区/会话的切换入口在左侧边栏;侧边栏收起时,每次切换都要额外点击。本插件把切换入口直接放进顶栏: - **工作区下拉** —— 展开可见全部工作区及其会话数,一键切换;可「添加工作区」(原生目录选择器)或删除。 - **会话下拉** —— 展开可见当前工作区全部会话及相对更新时间,一键切换;可「新建会话」。 行内操作全部复用 DSH 原生能力:重命名工作区/会话、删除工作区、分支会话、归档会话,与原生侧边栏行为完全一致。 支持 **Windows · macOS · Linux**(DSH Web GUI)——纯 JavaScript,无原生依赖,分发无需构建步骤。 ## 安装 `dsh-better-session-title` 是一个**组合包(bundle)**——以包形式分发的配置补丁层(见 [DSH 官方插件发布文档](https://deepseek-harness.github.io/deepseek-harness/develop/basic/publish))。用 `dsh plugin` 命令安装进 profile:它会自动链接包并追加到 `dsh.profile.bundles`: ```sh # 从 GitHub 安装(主分发渠道,v1.0.0 为当前发布 tag) dsh plugin --profile web add github:xinspark/dsh-better-session-title#v1.0.0 ``` - **建议锁定 commit**:GitHub 安装拉取的是仓库源码,tag 之后的新推送不会自动影响已安装版本;如需把运行内容严格固定到某个提交,用 `github:xinspark/dsh-better-session-title#`(官方文档推荐做法)。 - **本地目录 / tarball**(开发或离线环境): ```sh dsh plugin --profile web add ./dsh-better-session-title dsh plugin --profile web add ./dsh-better-session-title-1.0.0.tgz ``` 然后启动 Web UI:`dsh web`(或 `dsh --profile web`)。首次 `add` 会自动用 `@deepseek-ai/dsh-base` 初始化 profile。 卸载:`dsh plugin --profile web remove dsh-better-session-title`(同时移除依赖与组合层)。 插件的 bundle 补丁(`cordis.patch.yml`)会自动注册 host 与 client 两半。客户端按请求加载:客户端改动刷新页面即可,host 改动需要重启。 ## 主要功能 | 能力 | 说明 | | --- | --- | | 两级面包屑 | 顶栏左侧以「工作区 / 会话」展示当前位置,两侧各自展开下拉列表;空间不足时自动折叠为图标(悬停/点击仍可用)。 | | 工作区下拉 | 工作区列表(含会话数元信息)、添加工作区(原生目录选择器)、行内更多:重命名 / 删除工作区。 | | 会话下拉 | 当前工作区的会话列表(含相对时间元信息)、新建会话、行内更多:重命名 / 分支 / 归档会话。 | | 原生一致的交互 | 下拉为自绘层,样式逐值复刻原生 `Menu.module.css`(行高 40、padding 8/10、圆角 10、同款 shadow/边框 token);更多菜单、重命名/删除对话框全部使用原生 `Menu` / `Modal` / `Button` / `Input`(autoFocus、全选、输入法组合 Enter 防误触、工作区重复名校验、错误行)。 | | 生命周期一致 | 更多菜单跟随其所在下拉同生命周期:下拉关闭(点击外部 / Escape / 选择 / 切换)时菜单一并关闭,不残留孤立菜单。 | | 双语言 | 内置 zh/en 双语言字典,跟随 DSH 语言切换实时生效。 | ## 截图 **会话下拉展开**——切换会话、新建会话: ![会话下拉](docs/screenshots/session-dropdown.png) **会话更多菜单**——悬停行尾,重命名/分支/归档: ![会话更多菜单](docs/screenshots/session-more-menu.png) **工作区下拉展开**——切换工作区、添加工作区: ![工作区下拉](docs/screenshots/workspace-dropdown.png) ## 使用 安装后,打开任意会话,顶栏中央即显示「工作区 / 会话」面包屑: - 点击**工作区**一侧:展开工作区下拉(顶部为「添加工作区」)。 - 点击**会话**一侧:展开会话下拉(顶部为「新建会话」)。 - 悬停列表行:行尾显示「更多」按钮(重命名 / 分支 / 归档等,按行类型而定)。 - 选择行即切换;点击空白处或按 `Esc` 关闭下拉。 ## 与 dsh-basic-right-sidebar 的关系 [dsh-basic-right-sidebar](https://github.com/xinspark/DSH-Basic-Right-Sidebar) 把本插件作为**子插件**随 bundle 一并安装:它的 `package.json` 声明本包为依赖、`cordis.patch.yml` 同时插入两行插件;其「启用会话顶栏工作区/会话面包屑」设置通过全局快照 `window.__BASRS_SETTINGS__` 与 `'basrs:settings'` 事件实时控制本插件(关闭时本插件隐藏面包屑、恢复原生标题)。 - **装了 dsh-basic-right-sidebar 就不要单独安装本插件** —— 两个 bundle 各自插入同名插件行会产生重复行(`insert` 是追加语义)。 - 两个 bundle 都装了时,请在 dsh-basic-right-sidebar 设置中关闭其面包屑,仅保留本插件的顶栏面包屑。 - 本插件也可以**独立安装、独立使用**(无父插件时设置桥接缺省为启用,行为与旧版一致)。 ## 与官方项目的关系 本项目基于官方 [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) 构建,是一个**社区插件**,并非 DeepSeek 官方产品。它展示的都是 DSH 自己的数据与界面,只是重新组织;不修改任何系统源码。 ## 二次开发 - **`index.js`** —— host 半:最小空实现(纯 UI 插件,所有逻辑在浏览器半)。 - **`lib/client.js`** —— 浏览器半(UMD,注册进 DSH `clientModules`)。结构自上而下: 1. 本地基础工具:样式注入 / 定时器。 2. **双语字典**(`BST_ZH` / `BST_EN`)—— 注册进 `ctx.locale`,跟随语言切换;`bstT()` 带 fallback。 3. **自绘下拉列表** `BstList` —— 样式复刻原生 Menu;定位避让视口边缘;pointerdown 外部关闭(不用 mousedown,避免吃掉行内 click)。 4. **父插件设置桥接** —— 读取 `window.__BASRS_SETTINGS__` 快照、订阅 `'basrs:settings'` 事件(见 `WorkspaceTitleBreadcrumb`),控制面包屑开关。 5. `WorkspaceTitleBreadcrumb` —— 注册进 `conversation.session.header.actions`(`order: -20`,顶栏最左);紧凑模式自动折叠;更多菜单与下拉同生命周期;重命名/删除走原生 Modal。 6. `apply(ctx)` —— 样式注入 + 槽位注册;服务调用与 ui-workspace 一致(`ctx.workspaces` / `ctx.sessions`)。 扩展速查: - **新增行操作** —— 在 `wsListItems` / `ssListItems` 的 `actions` 数组加一项(`{ id, label, icon?, danger?, action }`)。 - **新增文案** —— 在 `BST_ZH` / `BST_EN` 字典加 key。 - **调整下拉样式** —— 修改 `insertStyle` 中的 `.bst-item*` 规则(token 与原生 Menu 一致)。 ## 特别感谢 感谢 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 与 DeepSeek AI 团队——核心的智能体、模型、工具、会话、Web UI 与插件生态都来自这个项目;也感谢 [Cordis](https://github.com/cordiverse/cordis) 提供的插件化基础,以及 [Koishi.js](https://koishi.chat/) 社区长期积累的插件化实践、工具与经验。 ## 许可证 [MIT](LICENSE) —— 完全开源免费。 Better Session Title 是 DeepSeek Harness 的社区插件,**并非 DeepSeek 官方产品**。