DeepSeek Harness plugin

dsh-queue-merge

Queue Consolidation for DeepSeek Harness: when the agent is busy and you queue several follow-up messages, the next turn runs with ONE consolidated formal prompt — the model rewrites the batch into a

Jump to install

Source facts

Repository
keyiadiannao/dsh-queue-merge
Latest update
Aug 20, 2026
Category
Workflow & Automation
GitHub stars
0
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/keyiadiannao/dsh-queue-merge
Plugin: dsh-queue-merge
Author: keyiadiannao

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-queue-merge

Queue Consolidation for DeepSeek Harness — when the agent is busy and you queue several follow-up messages, the next turn runs with one consolidated formal prompt instead of the agent replaying your messages one by one (do a bit → get corrected → redo → get corrected again).

Why

The official DSH agent loop consumes one queued prompt per turn. If you queue four follow-ups while the agent is mid-task:

① no tables, please
② by the way, we need to consider Windows
③ prefer TypeScript for the code
④ drop option B from the earlier proposal

…they become four separate turns, which invites piecemeal rework. This plugin adds a third queue-consumption policy:

queue individually   (official default: one message per turn)
queue + merge        (this plugin: consolidate the batch, execute once)

How it works

agent busy, user queues 2+ messages
        ↓
policy strip above the composer:  [Merge]  [Individually]   (shown only when 2+ queued)
        ↓  (merge)
agent/pre-step hook at the turn boundary
        ↓
call the SAME model that will execute to consolidate the whole batch
into ONE clean, complete, formal user prompt
        ↓   (success)
durable splice removes the queued messages; the consolidated prompt
REPLACES them as the turn's user message (full visible bubble)
        ↓
agent executes the consolidated prompt once

Key properties:

  • Consolidation, not a side-note. The queued messages are rewritten into a

single new official user prompt — the agent acts on the consolidated version, and the raw messages do not appear in the turn. Corrections win over earlier messages on the same thing; unrelated requests are kept as separate points.

  • Transactional zero-loss. The consolidation LLM call runs BEFORE the inbox

is touched. If it fails, the queued messages stay put and the official one-message-per-turn loop takes over — nothing is ever spliced out and dropped. (Note: consolidation itself is a lossy rewrite by design — the model's integrated understanding replaces the raw text. That is the accepted product semantic; what is never lost is the queue itself on any failure.)

  • Attachments are never merged. A batch containing any non-text block

(image, file, …) or any non-human source (plugin/system messages) skips the merge entirely and falls back to the official per-message processing — images and files are never rewritten away.

  • Queue-identity guard. The snapshotted message IDs are re-checked against

the live queue right before the splice; if the user edited, deleted, or reordered the queue during synthesis, the merge is aborted instead of removing messages that were not part of the synthesis.

  • No over-splice races. The pending list is snapshotted at hook entry;

messages that arrive mid-consolidation stay queued for the next turn.

  • Language follows the UI. The client reports the active locale; the

consolidated prompt is written in the UI language (zh → Simplified Chinese, en → English), falling back to the message language when unknown.

  • One hard line: the consolidation never invents permissions the user did

not state, so merging cannot widen the agent's authority.

  • Provenance badge. The consolidated bubble is followed by a small badge —

"merged N follow-up messages · view originals" — where the ORIGINAL messages remain inspectable, so the raw intent stays traceable.

  • Interruptible UI. The policy strip only appears when there are 2+ queued

messages (with one, merge is a no-op) and sits in the composer's input dock right under the native queue dock. Its mode and threshold come from the server, so a defaultMode: individually or minQueueForMerge: 5 config is never shown wrong in the UI.

Install

dsh plugin --profile web add "github:keyiadiannao/dsh-queue-merge#master"

Or add to your profile package.json:

"dependencies": {
  "dsh-queue-merge": "github:keyiadiannao/dsh-queue-merge#master"
}

And to dsh.profile.bundles: "dsh-queue-merge".

Configuration

- id: dsh-queue-merge
  config:
    defaultMode: merge          # merge | individually
    minQueueForMerge: 2         # claimed + queued threshold before merging applies
    synthesisProvider: ''       # empty = reuse the session's routed model
    synthesisModel: ''

Development

pnpm run build        # tsdown: host + client bundle (CSS Modules inlined)
pnpm run typecheck    # tsc --noEmit
pnpm test             # vitest

Relationship to the ecosystem

CapabilityOwner
Queue display / edit / delete / steerofficial DSH QueueDock
Queue reorder / clear / undodsh-queue-plus
Queue consumption policy (individually vs merge)this plugin

The three are complementary: queue-plus manages queue order, this plugin manages how the queue is consumed.

License

MIT