Introduction¶
In DeepSeek Harness (DSH), the plugin ecosystem emphasizes “everything is a plugin”. DSH Web GUI sidebar sessions are organized by workspace, and session history is bound to the corresponding workspace directory.
dsh-session-mover addresses the scenario of organizing sessions across workspaces: dragging an existing session row with complete history to another workspace title row, allowing the target workspace to gain a new session with the same history, while archiving the original session.
What is it¶
dsh-session-mover is a DSH plugin maintained by baisama-cloud, licensed under MIT.
It turns “moving sessions across workspaces” into a single drag-and-drop operation: the move uses the semantics of cloning to the target workspace + archiving the original session.
Core Features¶
- Drag directly within the session list without needing extra panels or buttons.
- Supports dragging sessions within a workspace group, cross-workspace sessions, and “Ungrouped” sessions into a workspace.
- A result prompt pops up at the bottom after moving; if the dragged session is currently open, it automatically jumps to the new copy.
- Dragging within the same workspace still uses the official reordering logic; the two do not interfere with each other.
- Visible red prompts are provided on failure; silent failures are avoided.
How it works¶
The session rows in the official sidebar are themselves draggable. When a session row is dragged up, it writes the session ID into dataTransfer:
setData("text/plain", id)
The plugin listens for drop at the document level, using semantic attributes (role="treeitem" and aria-expanded, rather than style classes) to locate the workspace title row under the cursor, and maps it to the corresponding workspace according to the order in the tree.
Upon a hit, the client invokes host capabilities. The host entry points provided in the documentation include:
POST /session-mover/move-session
In the dynamic plugin approach, the host also provides:
harness.handle('move-session')
On the host side, the following steps are executed as described in the documentation:
sessionQuery.readSessionreads the source session’s complete logs.sessions.createcreates a new session in the target workspace carrying the complete history, preserving creation time and agent presets, withcwdset to the target workspace path.sessions.flushpersists.workspace.attachSessionattaches the new session to the target workspace.workspaceRegistry.archiveSessionarchives the source session.
Installation and Enablement¶
The documentation does not provide complete DSH plugin add/enable commands; only the distribution and configuration examples given are listed below.
After cloning locally, use npm pack to generate the plugin package:
# Generates dsh-session-mover-0.1.0.tgz
npm pack
If needed to add it to the DSH plugin list, there is already a declaration example in cordis.patch.yml:
- insert:
- id: dsh-session-mover
name: 'dsh-session-mover'
The main entry declared in package.json is lib/index.js, the client bundle is lib/client.js, and engines.node is declared as >=20.
Typical Usage¶
- Hold down the session row you want to move in the sidebar session list.
- Drag it over the title row of another workspace (the row with the folder icon) and release.
- The original session disappears from the old workspace (archived), and a new session with the same history appears in the target workspace, with a bottom prompt showing the move result.
If the currently open session is the one being moved, the plugin will automatically jump to the new copy.
Applicable Scenarios and Notes¶
Suitable for DSH users who need to organize existing session history into different workspaces, especially scenarios where complete context needs to be preserved and re-pasting or copying session content is to be avoided.
Pay attention to the following points before use:
- The plugin runs with the permissions of the current DSH process; you should check the source code, dependencies, and MIT license before installing.
- Moving will generate a new session ID; the original session is archived and hidden, but logs and records are preserved and can be queried by
workspaceRegistry. - The workspace a session belongs to is determined by the session’s
cwd(current working directory). - Due to platform constraints (session logs are compressed by default using
zstd, session headers are immutable, and there is no migration API in the storage layer), it is impossible to preserve the original session ID while moving in place. - Subagent (
subagent) sessions and blank placeholder sessions are not available as draggable items. - In flat list mode (“In one list”), there are no workspace title rows, so drag-and-drop is invalid.
Conclusion¶
The value of dsh-session-mover is to converge the operation of organizing session history across workspaces into a single drag-and-drop, while preserving the complete history and archiving the original session.
GitHub Repository:
https://github.com/baisama-cloud/dsh-session-mover
The directory page URL is not provided in the verified materials, so no inference is made here.