DSH Session Manager
A client plugin for DeepSeek Harness web that adds a right-click context menu on sidebar conversation rows and a Session manager entry at the sidebar footer.
It answers the frequent request "the three-dot menu has too few options compared to Codex". The stock three-dot menu is hard-coded (no public session-row action slot in 0.1.0-rc.6), so this plugin works around it instead: right-click any session row for a full action menu, and use the footer button for the current session.
Features
Right-click a conversation in the sidebar:
| Action | Backing |
|---|---|
| Pin / Unpin chat | localStorage (dsh.session-pins.v1) — shared with dsh-session-pins |
| Mark as unread / read | Local state (dsh.session-unread.v1) with a dot on the row; opening a session marks it read |
| Rename chat | Official sessions.binding(id).session.rename() + a rename dialog |
| Archive chat | Official workspaces.archiveSession() |
| Continue in new chat | Official sessions.fork() then open the child |
| Open in file explorer | Official workspaces.openPath() on the session's workspace |
| Copy working directory | Workspace path from the workspaces store |
| Copy session title / ID | Clipboard (writeClipboard) |
| Copy deep link | Copies <origin>/?session=<id> — opens the session when dsh-deeplink is installed |
| Open in new window | window.open(.../?session=<id>) — needs dsh-deeplink to land on the session |
Sidebar footer "Session manager" (current session): export session ZIP, archive, fork, copy title / ID.
Not implemented (no backend in rc.6): continue in a new working tree, delete-session.
Install
dsh plugin --profile web add github:Semidia/dsh-session-manager#v0.1.1
# recommended companion for deep links:
dsh plugin --profile web add github:qyw233/dsh-deeplink#main
dsh webRestart dsh web once after adding, then hard-refresh the page. No official package is patched except one additive data-session-id attribute on the session row (see below).
How it works
- A one-line additive patch adds
data-session-idto the sidebar session row
(@deepseek-ai/dsh-client-ui-workspace → SessionNodeItem). Without it, no public API exposes which session a row represents.
- The plugin registers a capture-phase
contextmenulistener and a menu in the
public shell.overlay slot, positioned at the cursor via the primitives Menu (portal + getAnchorRect).
- The footer entry registers in the public
sidebar.footer.actionslot
(additive cell, id session-manager, same slot as Session Pins).
- All session/workspace actions use public client services
(sessions, workspaces, locale, slots); no private host APIs.
The data-session-id row patch lives in the installed@deepseek-ai/dsh-client-ui-workspace package and is overwritten on a dshupgrade — re-apply it (one line) after upgrading.
Compatibility
Targets @deepseek-ai/[email protected]. DeepSeek Harness is in developer preview; a new release candidate may change the slot contracts this plugin relies on until compatibility is reviewed.
License
MIT