DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Queue Resume On Stop — DSH Plugin for DeepSeek Harness
← Plugins
Q

@local/dsh-queue-resume-on-stop

Queue Resume On Stop

After a user stop, keep the queued messages flowing instead of leaving them stranded in the inbox

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:evanw0211/dsh-queue-resume-on-stop#7080f25bdeb58b4d1fd0de37d916045f485839e0
READMECompatibilityVersions

Compatibility and provenance

Queue Resume On Stop is published as @local/dsh-queue-resume-on-stop and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/13/2026

Versions

0.1.0stable
10/13/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
Not declared
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/13/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in integrations-communication.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseAb Publishdsh-ab-publishBrowser-automation publishing tool that logs into and posts to arbitrary websites, in one publishable plugin packageAb Wechat Scrapedsh-ab-wechat-scrape--- description: "The out-of-tree wechat_scrape tool: retrieves WeChat official-account articles, filters promotional blocks, and saves each as a Markdown file, for maintainers of this machine's dsh profiles." kind: "package-reference" ---Remote Web Ui@linxin666/dsh-remote-web-uiScan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and r

README

Resume Queue On Stop

A small Host plugin for DSH that keeps queued messages flowing after you press Stop.

The problem

While a turn is running, anything you send is queued in the agent's inbox (agent.inbox.nextTurn) and is claimed at the next turn boundary.

The Stop button calls agent.cancel({ kind: 'user' }, { keepInbox: true }) (dsh-api-session-controller → session.cancel). That aborts the in-flight turn and deliberately keeps the queue — but nothing re-arms the driver afterwards:

  • A normal turn end keeps looping: turn() returns true while inbox.hasPending, so the next queued prompt is claimed immediately.
  • An abort throws out of turn(), so kick() unwinds and the driver stops. The queued prompts stay in the inbox and are never sent to the model.

The loop already handles the mirror case: a message that arrives after the abort is classified as a wake (send() → wakingAfterAbort), which latches phase.wakeRequested; kick()'s exit path replays that latch. A message queued before the Stop never sets the latch — that is the gap this plugin closes.

Symptom the user sees: the queued message still sits in the queue (and is never answered) until some new message happens to wake the driver.

What it does

On every durable turn/end whose reason is aborted with cause user (the Stop button) or parent (a parent interrupting a child), if the same agent still has pending nextTurn prompts, the plugin asks the loop to wake once more — exactly as a message typed a moment after the Stop would. The next turn then claims the queued prompts and sends them to the model.

disposed (teardown) and hook (credential/session invalidation) aborts are ignored: restarting work there would fight the teardown. next-step input (agent.inject()) is deliberately non-waking and is not resumed.

Install

It is a plain Host bundle: no dependencies, no build step. Point DSH's plugin manager at this directory (absolute path) and it installs the package, adds the bundle to the profile, and activates over HMR:

plugin_manager install_bundle  <path-to-this-directory>

Equivalently, from the CLI: dsh plugin --profile <name> add <path-to-this-directory>.

Requires DSH 0.2.0-rc.2. The bundle resolves every Harness package from the running installation, so it declares no dependencies of its own.

Configuration

cordis.patch.yml inserts one row; override it in your profile patch:

- id: queue-resume-on-stop
  config:
    enabled: false   # turn the behavior off without uninstalling

Files

FileRole
index.jsHost plugin: the session/event trigger and the wake
cordis.patch.ymlInserts the queue-resume-on-stop row
package.jsonBundle manifest (dsh.bundle.patch)
locale/*.jsonPlugin Manager display text
dev/scan-stranded-queue.mjsScans stored session logs for "stop stranded the queue" occurrences
dev/dump-session.mjsDumps a slice of one session.v4.jsonl.zstd log

Notes on the wake

The public Agent surface (followup/steer/inject/cancel/inbox) has no wake primitive. Re-queuing a pending prompt would need inbox.remove(id) + followup(message), which writes a durable "canceled" inbox splice and re-insert — and Session.append() refuses to reenter while a session/event observer is running, which is exactly where this listener executes.

So the plugin calls wakeDriver(true) when it exists: it mutates only the in-memory phase latch (the identical call send() makes on its post-abort path) and appends nothing to the session log. If a future loop renames it, the plugin falls back to the public remove + followup() path, deferred past the append.