Reorder the messages queued while a DSH agent is busy, from inside the official queue dock: a drag handle and per-row ↑ / ↓ buttons on the dock's own rows, applied on the host as one concurrency-checked inbox splice. The dock is decorated rather than replaced, so previews, inline editing, steering, removal and attachments stay as shipped. A move is refused when the queue has changed since the caller last saw it, when the row is not a user prompt (a goal round prompt, for example), or when the queue belongs to a subagent session.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-queue-reorder
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:damlys99/dsh-queue-reorder
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Reorder the messages you queued while a DSH agent was busy — inside the official queue dock, not in a panel beside it.

What you get
- A grip handle on every queued row: drag a message where you want it.
- ↑ / ↓ per row, wearing the dock's own action-button class, for precision instead of a drag. The last row's ↓ is disabled, because there is nothing after it.
- The dock is decorated, never replaced. Previews, inline editing, steering, removal, attachments and collapse stay exactly as the conversation plugin ships them; uninstall and the dock is untouched.
Install
dsh plugin --profile web add -w dsh-queue-reorder
# restart dsh web, then reload the page
Requires DSH >=0.1.2-alpha.1 <0.2.0-0 (earlier client-plugin contracts have no
conversation.input.dock slot). From a checkout instead:
dsh plugin --profile web add -w link:/absolute/path/to/dsh-queue-reorder
Uninstall:
dsh plugin --profile web remove dsh-queue-reorder
Design
Two small halves, no build step, no runtime dependencies:
- Host (
lib/index.js) registers one same-origin route,POST /queue-reorder, and performs a single concurrency-checkedagent/inbox.splice('next-turn', …)over the smallest span containing both ends of the move. - Browser (
lib/client.js) is a hand-authored module-loader bundle. A hiddenconversation.input.dockentry (which rendersnull) reads the session snapshot for the queued ids and their order — the dock's DOM carries no ids — and aMutationObserverdecorates the official rows. It re-reads each row's position at click and drag time, because the dock reorders those very elements in place.
What it refuses, and why
| Refusal | Reason |
|---|---|
QUEUE_CHANGED |
Your view of the queue no longer matches the live queue; retry rather than scramble it. |
NON_USER_MESSAGE |
The move would discard and reinsert a row whose source the harness still tracks (a goal round prompt, for example), cancelling that work. |
SUBAGENT_UNSUPPORTED |
A subagent session's queue is owned by its parent session. |
| Steering rows | Only next-turn (placement: "queued") rows move; next-step stays put. |
A refused move changes nothing: every guard runs before the splice.
Caveats
- The decorator attaches to the official dock's markup (
[data-queue-dock], its row list, the trailing action container). Those are implementation details of@deepseek-ai/dsh-client-ui-conversation, not a published contract: if the dock is restructured, the controls may stop appearing. It fails soft — the dock keeps working, you just lose the grip until this plugin catches up. - Verified on DSH 0.1.5-rc.1, in a browser and through
selftest.mjs. - The route answers on the loopback interface without the GUI's session cookie, like other plugin HTTP routes. A cross-site browser request is still blocked: the JSON content type forces a CORS preflight that the route answers with 405.
Tests
node selftest.mjs
No network, no browser, no build. 32 assertions covering the move transaction, every refusal, the request decoder, the HTTP surface, and the dock decoration (injection idempotence, live index reads, drop marking, notice reporting).
License
MIT
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8567
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8567
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4363
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
ccch1mneyyy/dsh-TUI★ 4235
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 4081
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1441
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.