dsh-hover-archive
Codex-style hover archive for DeepSeek Harness Web.
Hover a sidebar conversation row and an Archive icon appears at the far right; one click archives the session. No menus, no dialogs.
Features
- Hover → Archive icon at the far right of the session row, exactly like the Codex conversation list.
- One click archives through the official
workspaces.archiveSessionAPI — the same face the built-in "…" menu uses, so archived sessions land in the same place and obey the same rules. - Blank rows untouched: the "New Session" placeholder row never gets a button.
- zh / en labels follow the app locale and re-label live on locale switch.
- Keyboard accessible: the button is a real
<button>; it reveals on:focus-withinand fires on Enter/Space. - Busy / error states: the icon dims while archiving and flashes the error color with the failure message as a tooltip if the call fails.
- Zero dependencies, zero build step: plain JavaScript, installs from source without any
allowBuildsapproval. - Self-tests:
npm testruns syntax checks plus a dependency-free DOM smoke test.
Install
dsh plugin --profile web add github:zhifengjiang/dsh-hover-archive
Then restart dsh web (or your desktop client) and refresh the page.
Uninstall:
dsh plugin --profile web remove dsh-hover-archive
How it works
- A pure client plugin (
dsh.client, platformweb) that injects a button into every actionable sidebar session row — the elements carryingdata-session-id. - The button is appended as the row's last child, so it renders to the right of the stock "…" row menu and is revealed purely by CSS on
:hover(and:focus-within). - A
MutationObserverre-decorates rows across React re-renders; decoration is idempotent (one button per row, blank rows skipped). - The click is intercepted in the capture phase (
stopPropagation+preventDefault), so archiving never opens the session. - Archiving calls
ctx.workspaces.archiveSession(id); the stock projection then removes the row from the list, and archiving the current session falls back to the same sweep the built-in action uses.
Why a button instead of a menu item
The stock row already archives in two clicks (hover → "…" → Archive). This plugin restores the Codex-style one-hover-one-click affordance. DeepSeek Harness 0.1.0-rc.6 exposes no public slot for extra session-row actions, so the button is injected into the row DOM — the same workaround community plugins such as dsh-session-manager and dsh-plugin-session-delete rely on.
Compatibility
- Built against DeepSeek Harness
0.1.0-rc.6(the@deepseek-ai/dsh-client-runtimeworkspaces face). - Platform: DSH Web. Any shell that renders the upstream web sidebar shows the button; a shell that replaces the sidebar with a native list may not.
- Older harness builds without
workspaces.archiveSessionare detected at runtime — the plugin logs a warning and disables itself instead of breaking the UI. - Coexists with
dsh-session-manager,dsh-plugin-session-deleteand the built-in "…" menu: this plugin adds one more affordance on the same row and calls the same official API.
No comments yet. Be the first to write one.