前言¶
在 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 仓库)。
核心功能¶
入口与操作¶
- 会话行「⋯」菜单中的 隐藏会话(slot
sidebar.workspaces.session.menu.item,order: 500)。 - 会话行尾部悬停按钮(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 等同于清空隐藏列表。
典型用法¶
- 在侧边栏找到要收起的会话,点「⋯」→ 隐藏会话(或行尾悬停按钮)。
- 确认该行已从列表消失;当前若正在该会话中对话,不会自动关闭(与归档行为不同)。
- 需要时再进 设置 → 隐藏会话,点「恢复」或「全部恢复」。
- 若希望搜索面板也不出现这些会话,保持「同时抑制搜索结果中的隐藏会话」开启。
开发者在仓库根目录可做清单自检(不必装进 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-keyDOM 契约,上游改版需同步插件。 - 切换界面语言后,部分文案需刷新页面才更新。
DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-hidden-session 用官方 list slot 注入「隐藏」动作,用 CSS 与宿主 JSON 持久化维护隐藏集合,不动会话数据。需要安装细节、REST 契约与限制清单时,以仓库 README 为准。