DeepSeek Harness 插件

dsh-workspace-drag

DSH Web UI plugin — drag a conversation onto any workspace in the sidebar to organize it. / DSH Web UI 插件:在侧边栏把对话拖到任意工作区即可归类整理,可在设置页开关。(英文原文)

跳到安装方式

来源信息

GitHub 仓库
lanscer/dsh-workspace-drag
最近更新
2026年8月20日
分类
界面增强
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/lanscer/dsh-workspace-drag
插件名:dsh-workspace-drag
作者:lanscer

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

<p align="center"> <img src="https://img.shields.io/static/v1?label=dsh-workspace-drag&message=Drag%20to%20Organize&color=4f8cff&style=for-the-badge&labelColor=1a1d24" alt="dsh-workspace-drag" /> </p>

<h1 align="center">dsh-workspace-drag</h1>

<p align="center"> <b>DSH Web UI plugin — drag a conversation onto any workspace to organize it</b> </p>

<p align="center"> <code>drag session row → workspace group → move(cwd + files + registry)</code> </p>

<p align="center"> <a href="https://github.com/lanscer/dsh-workspace-drag/blob/main/README.zh.md"><img src="https://img.shields.io/static/v1?label=%E4%B8%AD%E6%96%87&message=README.zh.md&color=10a37f&style=flat-square" alt="中文文档" /></a> <img src="https://img.shields.io/static/v1?label=license&message=MIT&color=green&style=flat-square" alt="License: MIT" /> <img src="https://img.shields.io/static/v1?label=dsh-plugin&message=%E2%9C%93&color=4f8cff&style=flat-square" alt="DSH plugin" /> <img src="https://img.shields.io/static/v1?label=platform&message=macOS%20%7C%20Linux&color=9aa4b2&style=flat-square" alt="Platform" /> </p>

---

DSH Web UI plugin — in the sidebar grouped view, drag a conversation onto another workspace's title (or any session row within that group) and release to move the conversation there. Seamless drag-and-drop: no popups, no intermediate panels — drop it and it's organized.

Installation

One-command install into the DSH web profile. Run this from inside the plugin directory (the folder containing package.json — after cloning dsh-workspace-drag, cd into it first):

npm run install:plugin

Or directly (cross-platform, uses Node.js):

node install-plugin.mjs

Works on Windows (PowerShell), macOS and Linux — the installer is a plain Node.js script, no bash or PowerShell-specific syntax.

This registers the plugin into ~/.dsh/profiles/web (on Windows: %USERPROFILE%\.dsh\profiles\web) by adding a link: dependency to the profile's package.json and creating a node_modules symlink. It does not run pnpm install, so it avoids the pnpm minimumReleaseAge policy that rejects dependencies published within the last 24 hours. Idempotent — re-running is a no-op when already installed.

> ⚠️ Windows notes > - Run the command inside the cloned plugin folder, not in your home directory — npm run needs a package.json in the current directory (the error ENOENT ... C:\Users\<you>\package.json means you ran it in the wrong folder). > - Creating the symlink uses junction, which works on Windows without Developer Mode or Administrator rights. > - If symlink creation is blocked by policy, the link: dependency is still written to the profile — then finish with dsh plugin --profile web add link:<plugin-path>.

After installation:

  • Client-only changes: refresh the browser page.
  • Host changes: restart dsh web.

> Note: the plugin requires the zstd CLI (see [Dependencies](#dependencies)).

Features

  • Seamless cross-workspace drag-and-drop: drag a session row → hover over another workspace group (title or any session row within it) to highlight → release to migrate.

- No floating panels, no confirmation dialogs; same-workspace drag-and-drop is left to DSH's native reordering, undisturbed. - A brief success banner appears after the move, and the conversation immediately appears in the target workspace.

  • Toggle: enable/disable with one click on the Settings → Drag to Organize page; when disabled, drag-and-drop is inert (no highlighting, no migration).
  • Safety:

- Sessions whose agent is currently running cannot be moved (exact agent-status check, no more coarse 30-second mtime window). - For a conversation that just finished: the host automatically waits for the log to quiesce (up to 15 s) and then migrates — one drop completes the move, no "retry later" loop. - The host-side migration is a copy-verify-atomic-swap: the session directory is copied to a staging location, the rewritten log is verified, then published to the destination. The old directory is only removed after the new copy is verified — data is never lost on failure. - The migration physically relocates the session log file, rewrites the header cwd field, and updates the workspace registry ownership account plus in-memory state (live header / persistence-coordinator cache / registry index), so the conversation remains usable after the move.

Data Model

  • Each session's workspace identity is its header cwd (an absolute directory path).
  • Sessions are stored at ~/.dsh/sessions/<projectKey(cwd)>/<session-id>/session.jsonl[.zstd].
  • Migration = relocating the session directory under the new workspace's projectKey directory + rewriting the first (header) line's cwd + using ctx.workspaceRegistry's detach/attach to update the workspace ownership ledger.
  • zstd logs are concatenated multi-frame containers: frame 1 = exactly one header line (newline-terminated), frames 2..N = appended event batches. The DSH reader requires the first frame to decode to exactly this header line.
  • During migration, zstd logs undergo frame-preserving surgery: only frame 1 is decoded → the header cwd is rewritten → re-encoded as a single checksummed frame (matching the DSH backend) → concatenated with the remaining original frames (byte-identical). The log must never be compressed as a single frame (that would break the DSH reader's "first frame = header only" invariant).

File Layout

dsh-workspace-drag/
├── package.json          # dsh.bundle.patch + client inject
├── cordis.patch.yml      # registers the plugin row in the web profile
├── lib/
│   ├── index.js          # Host: config/move HTTP routes + migration logic
│   └── client.js         # Browser: settings page (toggle) + document-level drag engine
├── test/
│   ├── fixtures/multiframe-session.jsonl.zstd  # multi-frame zstd session sample (7 frames)
│   ├── verify-core.mjs              # zstd round-trip + DSH frame scanner compatibility
│   └── integration-move.mjs         # end-to-end integration test for moveSessionToWorkspace
└── README.md

Host HTTP API

MethodPathDescription
GET/api/dsh-workspace-drag/configRead toggle { "enabled": true }
POST/api/dsh-workspace-drag/configWrite toggle { "enabled": false }
POST/api/dsh-workspace-drag/move{ "sessionId", "targetWorkspaceId", "waitMs" } — move a conversation; optional waitMs (0–30000) makes the host wait for the agent/log to quiesce and finish automatically; failures carry a code (agent-running / writing / move-failed)

Configuration is persisted in ~/.dsh/dsh-workspace-drag.json.

Dependencies

  • The host half requires the zstd CLI. The plugin auto-detects the binary via PATH search, falling back to common paths (/opt/homebrew/bin/zstd, /usr/local/bin/zstd, /usr/bin/zstd). Install via brew install zstd (macOS) or apt install zstd (Linux).
  • Requires DSH built-in services: webServer / sessions / sessionPersistence / workspaceRegistry

(all loaded by @deepseek-ai/dsh-web-app).

Tests

cd test
node verify-core.mjs      # Validate zstd round-trip + DSH frame scanner compatibility
node integration-move.mjs # End-to-end integration test (temp directory, does not touch real data)

Limitations

  • Conversations whose agent is currently running cannot be moved (you are asked to wait for the reply to finish); for a just-finished conversation the host waits for the log to quiesce and migrates automatically.
  • Migration changes the session's cwd — its workspace ownership and disk storage location. This is the essence of "organizing into a workspace."
  • The zstd CLI must be installed (auto-detected via PATH; no hardcoded path).

License

[MIT](LICENSE)

---

<p align="center"> <a href="https://github.com/lanscer/dsh-workspace-drag/blob/main/README.zh.md"><b>中文文档</b></a> · <a href="https://github.com/lanscer/dsh-workspace-drag">English</a> </p>