dsh-hover-archive
 
DeepSeek Harness Web 的 Codex 风格悬浮归档插件。
鼠标悬浮侧边栏的任意会话行,最右侧浮现一个 Archive 图标,点一下即归档该会话。没有菜单、没有弹窗。
功能
- 悬浮会话标题 → 行最右侧浮现 Archive 图标,与 Codex 对话列表一致。
- 一键归档,走官方
workspaces.archiveSessionAPI——与内置「…」菜单里「归档」用同一个接口,归档后去向、规则完全一致。 - 跳过「新对话」占位行:空行不会被挂按钮。
- 中英文标签跟随界面语言,切换语言时实时更新。
- 键盘可用:按钮是真正的
<button>,:focus-within时浮现,Enter/空格即可触发。 - 进行中/失败状态:归档中图标变暗;失败时图标短暂变红,tooltip 显示失败原因。
- 零依赖、零构建:纯 JavaScript,从源码安装不需要
allowBuilds授权。 - 自带测试:
npm test执行语法检查 + 无依赖 DOM 冒烟测试。
安装
dsh plugin --profile web add github:zhifengjiang/dsh-hover-archive然后重启 dsh web(或你的桌面客户端)并刷新页面。
卸载:
dsh plugin --profile web remove dsh-hover-archive工作原理
- 纯客户端插件(
dsh.client,平台web),向每个可操作的侧边栏会话行(带data-session-id的元素)注入一个按钮。 - 按钮被追加为会话行的最后一个子元素,渲染在官方「…」行菜单的右侧;由 CSS 在
:hover(以及:focus-within)时浮现。 MutationObserver在 React 重渲染后重新装饰会话行;装饰是幂等的(每行一个按钮,空行跳过)。- 点击在捕获阶段被拦截(
stopPropagation+preventDefault),归档操作绝不会误打开会话。 - 归档调用
ctx.workspaces.archiveSession(id);官方投影随后把该行从列表移除,归档当前会话时与内置操作走同一条清理路径。
为什么是按钮而不是菜单项
官方行本来就能两次点击归档(悬浮 → 「…」→ 归档)。本插件还原的是 Codex 式「一悬浮一单击」 的体验。DeepSeek Harness 0.1.0-rc.6 没有给第三方插件提供会话行的公开操作槽位,因此按钮采用 DOM 注入——这也是社区插件 dsh-session-manager、dsh-plugin-session-delete 采用的同一种 workaround。
兼容性
- 基于 DeepSeek Harness
0.1.0-rc.6(@deepseek-ai/dsh-client-runtime的 workspaces face)开发。 - 平台:DSH Web。凡是渲染上游 Web 侧边栏的壳都能显示按钮;用原生列表替换侧边栏的壳可能不显示。
- 更旧的 Harness 构建若缺少
workspaces.archiveSession,插件会在运行时检测到并打印警告、自动禁用,不会破坏界面。 - 与
dsh-session-manager、dsh-plugin-session-delete以及内置「…」菜单共存:本插件只是在同一行上多提供一个入口,调用的是同一个官方 API。
许可证
[MIT](LICENSE)