dsh-session-tree
Manifest validEnhanced session tree for the DSH sidebar (fork of ui-workspace): tag chips, group-by-tag, drag-to-move across workspaces, delete with backup.
dsh-session-tree
An enhanced session tree for the DSH sidebar: the official ui-workspace tree plus tags, tag grouping, drag-to-move across workspaces, and a delete action that can back sessions up first.
Forked from @deepseek-ai/dsh-client-ui-workspace (0.1.7 tree) and shipped as a separate bundle so the official package stays untouched.
Requirements
| DSH | 0.2.1-rc.2 (developed and tested against it) |
@deepseek-ai/cordis | ~4.0.5 |
| React | 18.2+ |
| Mode | Web UI (web or desktop profile) |
| Companion | dsh-session-manager — required for tags, moves and deletes |
Earlier DSH releases are untested.
Install
Two packages, in this order:
dsh plugin --profile <your-profile> add github:minhaoli/dsh-session-manager
dsh plugin --profile <your-profile> add github:minhaoli/dsh-session-tree
Then disable the official ui-workspace row, because this package registers the same uiWorkspace service:
# ~/.dsh/profiles/<profile>/cordis.patch.yml
- id: ui-workspace
disabled: true
Reload the page after installing — the client half is served as a separate module.
The session-manager dependency
The browser half does not talk to the host over an IPC bridge. It calls a same-origin REST API under /api/dsh-session-manager/:
| Call | Endpoint |
|---|---|
| Read all tags | GET /api/dsh-session-manager/tags |
| Write one session's tags | PUT /api/dsh-session-manager/tags |
| Delete sessions | POST /api/dsh-session-manager/sessions/delete |
| Move sessions | POST /api/dsh-session-manager/sessions/move |
Those four endpoints are served by dsh-session-manager. Without it, tagRead() catches the failure and returns {} — the tree still renders, but every tag is empty, writes silently do nothing, and drag-to-move / delete fail. If tags look broken, check that dsh-session-manager is installed and that its REST routes registered (webServer present).
What it adds to the official tree
| Feature | Where |
|---|---|
| Tag chips on session rows | sidebar.workspaces.session.row.action |
| Tag / move / delete menu entries | sidebar.workspaces.session.menu.item |
| Grouping the tree by tag | the tree header |
| Drag a session onto another workspace | the session row |
| Archive and unarchive | the row menu (unarchive is the direction the GUI lacks) |
The tag data lives in ~/.dsh/session-tags.json, written by dsh-session-manager, so tags survive restarts and ride along when a session moves across workspaces.
The client polls for tag refreshes every 20 seconds. That is the interval a tag written from another window shows up in this one.
Implementation notes
lib/index.jsis a host-side placeholder —export default function apply() {}. The bundle patch mounts both halves in one row, so the host half has to exist for the package to compose.lib/client.js(≈260 KB, 6015 lines) is the built fork. ItssourceMappingURLstill points at@deepseek-ai/dsh-client-ui-workspaceand the CSS tag keepsdataset.plugin = "@deepseek-ai/dsh-client-ui-workspace"— that is the upstream provenance, not a bug.client.jsdefinesclass UiWorkspaceService extends Serviceand callssuper(ctx, "uiWorkspace"). That is why the official row must be disabled: two registrations ofuiWorkspacecannot coexist.- The package mounts into
sidebar.workspaces.session.menu.item,sidebar.workspaces.session.row.actionandshell.overlay, and injects the official client packages it builds on (dsh-api-remotes,dsh-api-session-controller,dsh-api-workspace-controller,dsh-client-connection,dsh-client-locale,dsh-client-shortcuts,dsh-client-ui-conversation,dsh-client-ui-layout,dsh-client-ui-renderer,dsh-client-ui-session,dsh-client-ui-sidebar).
Companion plugins
dsh-session-manager— required: the REST API this tree reads and writes.dsh-session-query-vector— semantic session search backend.dsh-session-search— in-conversation find bar.dsh-ui-reload— one-click frontend reload button.
License
MIT — see LICENSE. The bundled client code derives from @deepseek-ai/dsh-client-ui-workspace; keep the upstream license terms in mind when redistributing.
Comments
Loading…
Similar plugins
by EugeneVl
Session folders for the DSH web sidebar: one-level named folders per workspace, drag-and-drop or context menu to group sessions, server-side persistence. No harness changes.
★ 10
↓ 164/wk
MIT
JavaScript
Oct 22, 2026
dsh plugin --profile web add dsh-session-foldersby lsdt45
DSH web plugin: hierarchical workspace tree + time-bucket view + session pinning. Fork of KannaKuron/dsh-better-workspace
★ 1
MIT
JavaScript
Oct 23, 2026
dsh plugin --profile web add dsh-workspace-plusDrag a session onto another workspace in the DSH sidebar and it really moves: the session-log header cwd is rewritten and the log directory is re-homed under the target project, with a progress bar wh
★ 0
dsh plugin --profile web add dsh-session-drag-moveby NattoCB
Adds a Workspaces / Recent-sessions switcher above the sidebar list, with a pinned-sessions group, a per-row menu (pin/unpin, copy session id), title filtering, and browser-local pin storage with a on
★ 1
MIT
JavaScript
Sep 10, 2026
dsh plugin --profile web add dsh-plugin-sidebar-viewsby 439436269-ctrl
DSH 插件:侧栏内联的「置顶」会话分组(原生度量 + 就地搜索)。A pinned-session group in the DeepSeek Harness sidebar.
★ 0
MIT
JavaScript
Oct 7, 2026
dsh plugin --profile web add @vfvrpq/dsh-pinned-sessionsby The-latest-one
DeepSeek Harness (DSH) sidebar plugin: stack-safe fork tree, two-track indentation, marquee title, leading/hover slots, and cascade purge.
★ 5
MIT
TypeScript
Oct 3, 2026
dsh plugin --profile web add dsh-branch-workspace-folders