ivanant/dsh-workspace-sidebar

dsh-workspace-sidebar

让 DSH 的侧边栏按工作区共享

待分类

dsh-workspace-sidebar

中文 | English

让 DSH Web GUI 的侧边栏按工作区共享:同一个工作区里的所有对话使用同一份侧边栏标签与布局;切换到同工作区的另一个对话时,侧边栏内容不再跟着换。

功能

  • 在「设置 → 通用」新增一个开关「按工作区共享侧边栏」,默认开启;开关下方会显示当前状态(例如「已生效:侧边栏跟随该工作区固定的承载会话」)。
  • 收起侧边栏后,会话标题栏右上角会出现「展开侧边栏」按钮(带快捷键提示),与官方行为一致。
  • 工作区模式:每个工作区固定一个承载会话(第一次使用时取当时最新的非空白会话,之后不再随列表变化),该工作区所有对话共用这份侧栏(已打开标签、激活标签、分屏、浮动面板、展开状态等)。
  • 点「新会话」不会清空共享侧栏,也不会改变承载会话;空白会话发出第一条消息后仍然如此。
  • 对话模式:关闭开关后,恢复 DSH 自带的按会话保存行为。
  • 工作区切换:换到另一个工作区时,侧边栏切换到该工作区承载会话的那份布局。
  • 承载会话被归档/删除后,自动顺延到下一个可用会话并重新固定。
  • 没有工作区的对话(Ungrouped)没有共享范围,仍跟随当前对话。

安装

dsh plugin --profile web add dsh-workspace-sidebar

或在 Web 界面「设置 → 插件」里从本地目录安装。安装后刷新页面,在「设置 → 通用」里可以看到开关。

实现方式

  • 不替换、不修改官方 ui-sidebar-right 的 rightbar 槽,也不 fork 官方包,因此官方后续更新可以正常升级。
  • 插件做三件事:
  1. 注册「设置 → 通用」里的一行开关。
  2. 在切换会话/工作区时,让官方侧边栏选中该工作区的固定承载会话:第一次使用时选当时最新的非空白会话并记住它,之后不再随新建会话改变;临时把当前会话源映射到承载会话,并同步通知官方 SidebarSessionViews 重新选择,然后立即恢复。这样官方侧边栏的根组件、标签、持久化和导航都保持原样。
  3. 替换会话标题栏右上角的「展开侧边栏」按钮(仅此一个单槽控件):官方按钮读取的是当前会话自己的布局,因此在非承载会话里会显示错误的状态,点击也只改当前会话。替换后的按钮读取整个侧边栏的实际展开状态,并通过官方 sidebarRight 控制器切换真正在显示的会话。
  • 开关状态和每个工作区的承载会话存在浏览器 localStorage(dsh.workspace-sidebar.v1.mode、dsh.workspace-sidebar.v1.anchors)。

验证

  • 刷新后打开「设置 → 通用」,能看到「按工作区共享侧边栏」和状态行。
  • 状态行显示「已生效:侧边栏跟随该工作区固定的承载会话」。
  • 打开侧边栏,切到同一工作区的另一个对话,侧边栏标签与布局保持不变。
  • 在同工作区点「新会话」:侧边栏保持原样;再点标题栏的展开按钮,打开的仍是共享的那份侧栏,而不是空白默认布局。
  • 关闭开关后,再切换对话,侧边栏恢复为每个对话各自保存。

边界

  • 侧边栏布局仍保存在浏览器 localStorage,不跨设备同步。
  • 工作区模式下,侧边栏里的会话内容类标签(例如「对话」标签)绑定的是该工作区的承载会话,而不是当前正在看的会话。文件、文档预览、终端等以工作区目录为根的内容不受影响。
  • 承载会话在第一次使用时固定下来;新建会话、拖动会话顺序都不会改变它。只有承载会话被归档/删除时才会顺延。
  • 没有工作区的会话没有共享范围。

许可

MIT