When managing sessions in the sidebar of DeepSeek Harness (DSH), moving conversations between different workspaces often requires cumbersome menu operations. dsh-workspace-drag, as a DSH Web UI plugin, is designed to simplify this process. It allows users to directly drag a conversation row into any workspace group, enabling session migration and organization.

Plugin Overview

This plugin was developed by maintainer lanscer and is released under the MIT license. It coordinates a browser-side drag-and-drop engine with host-side atomic migration logic to move sessions between workspaces without opening an intermediate panel.

Installation

You can install it from the GitHub repository using the official plugin command:

dsh plugin --profile web add github:lanscer/dsh-workspace-drag

If you have a local checkout, run the packaging script inside the plugin directory:

npm run install:plugin

Notes:
* The plugin registers itself to the ~/.dsh/profiles/web directory.
* On Windows, the install command must be run inside the cloned plugin directory (the directory containing package.json); otherwise, you will get the error ENOENT ... package.json.
* On Windows, the plugin installer uses a junction to create the symbolic link, so developer mode or administrator privileges are not required.

Usage

After enabling the feature, in the Sidebar’s grouped view:
1. Hold down a conversation session row.
2. Drag it to another workspace group’s title or any session row within that group.
3. Release the mouse, and the session is automatically moved to the target workspace.

If you want to control this feature from the settings page, go to Settings → Drag to Organize.

Features

The plugin mainly provides the following core capabilities:

  • Seamless cross-workspace drag and drop: Drag a session row directly to the target workspace group, without confirmation dialogs or intermediate panels.
  • One-click toggle on the settings page: Enable or disable the drag-and-organize feature anytime from the settings page.
  • Running session protection: Session agents currently in a running state cannot be moved.
  • Automatic wait for log writes to settle: For sessions that just finished, the host automatically waits for log writing to complete (up to 15 seconds), ensuring data integrity during migration.
  • Atomic move verification: Migration uses a “copy to a temporary location -> verify -> atomic swap” mechanism, ensuring no data loss.
  • Live write-handle redirection: Fixed ENOENT errors caused by stale handle paths after migration, ensuring sessions can continue to receive logs normally after being moved.

Technical Details and Notes

Migration Logic

Each session’s workspace identity is determined by the cwd field (absolute path) in its log header. A migration rewrites that header, updates ownership in the workspace registry, and moves the physical session directory to the directory for the new workspace item key.

v3 Log Format Support

The plugin requires DSH version 0.1.5 or higher to support the v3 log format. During migration, it rewrites the header of the session.v3.jsonl[.zstd] file; otherwise, the DSH persistence layer will report a path mismatch error.

Dependencies and Compatibility

  • Node.js: Node.js >= 18 is required.
  • zstd CLI: the zstd command-line tool must be installed on the host.
  • Header rewrite: migration rewrites the cwd field in the log header.

File Structure

The plugin’s core logic is located in lib/index.js (host-side) and lib/client.js (browser-side), and is integrated using the dsh.bundle.patch and dsh.client.inject configuration in package.json.

Conclusion

dsh-workspace-drag addresses the pain point of session organization in DSH through a native drag-and-drop experience, providing a safe and atomic migration solution. For developers who frequently adjust workspace structures, it is a practical efficiency tool.

  • GitHub repository: https://github.com/lanscer/dsh-workspace-drag
  • Plugin directory: https://www.skillhub.cn/plugins/lanscer/dsh-workspace-drag