dsh-hidden-session:把侧边栏会话藏起来,需要时再恢复

前言

在 DSH(DeepSeek Harness)里做智能体或长期任务时,侧边栏会话列表会越来越长。归档会改变会话状态并走核心 RPC;若你只是想「眼不见为净」,又不想动历史、磁盘数据或 Workspace 归属,就需要一种只作用于显示层的办法。下面介绍社区插件 dsh-hidden-session(维护者 xthreehao),它把指定会话从侧边栏隐藏,并可在设置页随时恢复。插件分类为客户端,契约与实现是在 DSH 0.2.0-rc.2 运行构建上核对过的;交付形态为免构建、零 npm 运行时依赖的 lib/*.js。

这是什么

dsh-hidden-session 是 DSH 的双半插件:Cordis 宿主半提供 REST 与持久化,Module Loader 浏览器半注入菜单、CSS 隐藏与设置页。隐藏只影响侧边栏(及可选的搜索结果展示),不会改动会话本身、历史记录、磁盘数据或 Workspace 归属。许可证为 MIT(见 GitHub 仓库)。

核心功能

入口与操作

  1. 会话行「⋯」菜单中的 隐藏会话(slot sidebar.workspaces.session.menu.item,order: 500)。
  2. 会话行尾部悬停按钮(slot sidebar.workspaces.session.row.action,order: 300)。

隐藏后该行立刻从侧边栏消失,并弹出底部提示。恢复路径:设置 → 隐藏会话(一级设置导航),可逐个恢复或全部恢复。

持久化与可选行为

隐藏集合写在宿主侧:

~/.dsh/storages/dsh-hidden-session.json

重启 DSH 或换浏览器后仍有效。设置页可开关「同时抑制搜索结果中的隐藏会话」(默认开启,状态记在当前浏览器)。

浏览器半如何藏行

侧边栏会话行根元素带有稳定属性 data-row-key="session:<sessionId>"(来自 @deepseek-ai/dsh-client-ui-workspace)。插件注入按 id 的 CSS 规则隐藏对应行,并对已知隐藏行打 [data-dsh-hidden-row],以应对退出动画时 cloneNode 摘掉 data-row-key 的边界情况。sessionId 经白名单校验(^[A-Za-z0-9._-]{1,128}$),避免 CSS 注入。

宿主 REST 接口

GET  /api/dsh-hidden-session/state     → { version, hidden: [id…], updatedAt }
POST /api/dsh-hidden-session/hide      body { sessionId } | { sessionIds: [] }
POST /api/dsh-hidden-session/show      body { sessionId } | { sessionIds: [] }
POST /api/dsh-hidden-session/show-all

写操作在 loopback + 同源校验通过后落盘(原子写入,权限 0600)。宿主半只声明 webServer 依赖,不碰 workspaceRegistry 或会话存储文件。

安装与启用

先用进程命令行确认实际 profile(桌面版多为 desktop,CLI Web 版多为 web)。Windows 上可查 DeepSeek Harness 进程的 CommandLine,其中会出现 ~/.dsh/profiles/<profile>。

两条激活路径只能选一条,不能同时把包写进 dsh.profile.bundles 又在 cordis.patch.yml 里 insert 同一插件,否则可能实例化两次并触发重复路由(宿主半有幂等跳过,但仍应只保留一种方式)。

路径 A:bundle(分发推荐)

包自带的 cordis.patch.yml 通过 dsh.profile.bundles 插入 Cordis 行,重启后生效。

路径 B:profile patch 层(开发常用)

在 ~/.dsh/profiles/<profile>/cordis.patch.yml 末尾追加:

- insert:
    - id: hidden-session
      name: 'dsh-hidden-session'

保存后热重载,无需重启(作者在 0.2.0-rc.2 桌面版实测)。

无论哪条路径,Loader 都要能按包名 dsh-hidden-session 解析到目录。推荐用 CLI 链接本地仓库(会写 dependencies 并 reconcile bundles):

dsh plugin --profile <profile> add -w "link:<本仓库的绝对路径>"

若只走路径 B 且不在 bundles 里登记,可手工建 junction/拷贝到:

~/.dsh/profiles/<profile>/node_modules/dsh-hidden-session

一次常见落地形态:dependencies 里 "dsh-hidden-session": "link:<路径>",bundles 里不写该包,仅用 cordis.patch.yml 的 insert 激活。

临时停用:把 insert 行改为 disabled: true。卸载示例(Web profile):

dsh plugin --profile web remove dsh-hidden-session

并确认 dsh.profile.bundles 中已无该行,然后重启 DSH。删除 ~/.dsh/storages/dsh-hidden-session.json 等同于清空隐藏列表。

典型用法

  1. 在侧边栏找到要收起的会话,点「⋯」→ 隐藏会话(或行尾悬停按钮)。
  2. 确认该行已从列表消失;当前若正在该会话中对话,不会自动关闭(与归档行为不同)。
  3. 需要时再进 设置 → 隐藏会话,点「恢复」或「全部恢复」。
  4. 若希望搜索面板也不出现这些会话,保持「同时抑制搜索结果中的隐藏会话」开启。

开发者在仓库根目录可做清单自检(不必装进 DSH):

npm run check

插件已运行时可测宿主 API(默认 http://127.0.0.1:3080,桌面版端口见 GUI 地址栏,例如 19387):

node scripts/smoke.mjs
node scripts/smoke.mjs 19387

菜单、CSS 与设置页仍需按上面步骤人工点一遍。

适用场景与注意

适合谁:侧边栏会话多、希望按视觉整理列表,又不想归档或删数据的 DSH 用户与插件作者(README 中的 slot / DOM 写法可作为扩展会话行动作的参考)。

运行与信任:插件以当前 DSH 进程权限运行;安装前请阅读 GitHub 源码 与 MIT 许可证,自行判断是否满足环境要求。package.json 声明引擎 dsh >= 0.1.1-rc.1;作者文档中的端到端验证针对 0.2.0-rc.2 桌面版。

已知限制(摘要):

  • 搜索抑制依赖结果行标题与隐藏会话标题的精确文本匹配;摘要未加载时可能匹配不到(宁可不藏)。
  • 分组头会话数仍含隐藏行;隐藏当前会话不会关对话。
  • 依赖 data-row-key DOM 契约,上游改版需同步插件。
  • 切换界面语言后,部分文案需刷新页面才更新。

DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-hidden-session 用官方 list slot 注入「隐藏」动作,用 CSS 与宿主 JSON 持久化维护隐藏集合,不动会话数据。需要安装细节、REST 契约与限制清单时,以仓库 README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye