dsh-quick-archive
English · 中文
A DeepSeek Harness Web plugin: every session row in the
sidebar gains a one-click Archive icon button in its trailing action area, right beside the ⋯ menu, so
archiving a session takes one click instead of a menu detour.
Features
- One archive icon button per session row, revealed on hover exactly like the shipped
⋯button. - One click archives that session — no menu to open, no dialog to confirm.
- The click goes through the declared Client service
ctx.uiWorkspace.archiveSession(sessionId), the same call the shipped⋯→ Archive session item makes. Archiving the current session therefore still clears the main panel into the New Session state; no behaviour is re-implemented here. - Labels come from the Client locale service (zh / en) and the icon inherits the active theme through the
--dsw-alias-*tokens, so light and dark both stay correct. - Only session rows are touched: workspace rows, search-result rows and the blank "new session" placeholder row are left as they are.
- Uninstalling the plugin removes every control it added (listeners, stylesheet and buttons are disposed with the Client run).
Install
Requires the DSH Web profile (dsh web).
# from this repository (resolved and built by the profile's package manager)
dsh plugin --profile web add github:MoseeVision/dsh-quick-archive
# or from the prebuilt bundle asset attached to each release
dsh plugin --profile web add https://github.com/MoseeVision/dsh-quick-archive/releases/latest/download/dsh-quick-archive.tgz
This plugin is not published to npm — install it from one of the two GitHub sources above.
You can also install it from the 插件 / Plugins page of the Web GUI, or from the dshmarket storefront once the entry is listed. After installing, reload the page once: a newly added Client module is served in the boot table, it does not hot-patch into an already-open tab.
Usage
Hover any session row in the sidebar → the archive icon appears to the left of ⋯ → click it. The row
disappears from the list.
Restoring a session stays where DSH already put it: Settings → Archived sessions → Unarchive (设置 → 已归档会话 → 取消归档). This plugin adds no second restore surface.
How it works
The shipped browsing region (sidebar.workspaces) exposes no extension hole under a session row — its only
child seat is the directory-flow hole — so this plugin does not claim a slot and does not replace the list.
Instead it contributes into the row's own action span:
- On
pointerover/focusin, the nearestdiv[role="treeitem"]is resolved and walked up the React fiber chain until the session-row props (node.idplus the row'sonArchiveaction) appear. That is what makes workspace rows and search-result rows fall through untouched, and it means a DOM node reused for another session can never archive the wrong one — the id is re-read at click time. - A plain
<button>with an inline SVG glyph is inserted as the first child of the row's action span, so it sits left of⋯and shares the row's hover reveal andgap: 12pxrhythm. - The click calls
ctx.uiWorkspace.archiveSession(id), disables the button while the write is in flight, and re-enables it only if the Host rejects (the rejection is logged, matching the shipped menu's behaviour).
Everything it registers — the locale namespace, the stylesheet, the two document listeners and the injected buttons — is torn down in the effect clean-up.
Compatibility
Written against @deepseek-ai/dsh 0.1.6-alpha.2 (Web profile). The plugin owns no Host service, no setting
and no storage; the Host half is an empty apply().
Related
- deepseek-harness — the host this plugin extends.
- awesome-dsh-plugin — the curated plugin list
this package is submitted to (
catalog/awesome-dsh-plugin.ymlholds the ready-to-paste entry).
License
中文 (dsh-quick-archive)
一个 DeepSeek Harness Web 端插件:给侧边栏的每一个会话行
加一个一键归档图标按钮,位置就在行尾 ⋯ 菜单的左边,归档一个会话从「点开菜单再选一项」变成「一次点击」。
功能
- 每个会话行一个归档图标按钮,和原生
⋯一样在悬停该行时出现。 - 点一下立即归档该会话:不展开菜单,也没有确认弹窗。
- 调用的是已声明的 Client 服务
ctx.uiWorkspace.archiveSession(sessionId),与原生⋯→ 归档会话 走的是同 一条路。因此归档当前会话时依然会按原生语义清空主区域回到新会话状态——这里没有重复实现任何归档逻辑。 - 文案走 Client locale 服务(中 / 英),图标用
--dsw-alias-*主题令牌取色,明暗主题都跟随。 - 只处理会话行:工作区行、搜索结果行、空白的「新会话」占位行都不动。
- 卸载插件即收回它加的一切:监听器、样式表和按钮全部随 Client run 释放。
安装
需要 DSH 的 Web profile(dsh web)。
# 从本仓库安装(由 profile 的包管理器解析并构建)
dsh plugin --profile web add github:MoseeVision/dsh-quick-archive
# 或用每次 Release 附带的预构建 tarball
dsh plugin --profile web add https://github.com/MoseeVision/dsh-quick-archive/releases/latest/download/dsh-quick-archive.tgz
本插件未发布到 npm,安装请用上面两种 GitHub 来源之一。
也可以在 Web GUI 的插件页面安装,条目收录后还能从 dshmarket 市场里一键安装。装完请把页面刷新一次:新加入的 Client 模块要出现在启动模块表里,不会热插进已经打开的页面。
使用
鼠标移到侧边栏任意会话行 → ⋯ 左侧出现归档图标 → 点一下,该行从列表消失。
恢复入口保持在 DSH 原来的位置:设置 → 已归档会话 → 取消归档。本插件不另加第二个恢复入口。
实现说明
原生浏览区(sidebar.workspaces)在会话行下面没有开放任何扩展位——它唯一的子席位是目录选择流程的 hole——
所以本插件不占 slot、也不替换整个列表,而是往这一行自己的动作区里追加内容:
- 在
pointerover/focusin时找到最近的div[role="treeitem"],沿 React fiber 向上走到会话行的 props (node.id加上这一行的onArchive)出现为止。这一步让工作区行和搜索结果行自然被跳过;也正因为 id 是在 点击那一刻重新读取的,被复用的 DOM 节点不可能归档错会话。 - 造一个普通
<button>(内联 SVG 图标),插到该行动作区的第一个子节点位置,于是它落在⋯左边,共享该行 的悬停显隐与gap: 12px间距。 - 点击调用
ctx.uiWorkspace.archiveSession(id),请求在途时禁用按钮;只有 Host 拒绝时才恢复可点,并把拒绝 记进 console——与原生菜单项的行为一致。
它注册的一切(locale 命名空间、样式表、两个 document 监听器、注入的按钮)都在 effect 的清理函数里回收。
兼容性
针对 @deepseek-ai/dsh 0.1.6-alpha.2(Web profile)编写。插件不持有 Host 服务、设置项和存储,Host 半边是一
个空的 apply()。
No comments yet. Be the first to write one.