DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-ask-guard

d

dsh-ask-guard

Manifest valid

Cooperative timeout guard for ask_user_question: lost or unanswered questions resolve as a structured ASK_TIMEOUT instead of hanging the turn forever.

hasBundlePatch

dsh-ask-guard

Timeout guard for ask_user_question in DeepSeek Harness: a lost or unanswered question resolves as a structured ASK_TIMEOUT instead of hanging the turn forever.

The problem

The question card is delivered to the browser over a single push on the mux WebSocket. When the page is backgrounded, the laptop sleeps, or the connection dies half-open, the frame is lost, the client never notices (no heartbeat), and the tool waits forever — observed hangs of 6+ hours, recoverable only by pressing Stop. Upstream report: deepseek-ai/deepseek-harness#1554.

What this plugin does

It registers a tools/execute wrapper that arms a cooperative deadline on every ask_user_question dispatch (the same mechanism as the official dsh-tool-call-timeout-policy, which only enforces budgets declared by tool plugins — ask_user_question declares none).

  • When the deadline wins, the waiting provider's abort handler fires: the web provider broadcasts question/resolved cancelled, so the stuck composer (if any) is cleaned up.
  • The wrapper then replaces the normalized abort with a structured error result (code: ASK_TIMEOUT, name: AskTimeoutError) with a model-facing message, so the agent can end the turn gracefully instead of blocking.
  • All other tools pass through untouched.

The timeout is cooperative (@deepseek-ai/dsh-timeout notifies via exec.signal; the web user-questions provider honors the signal, so it terminates for real).

Install

dsh plugin --profile web add dsh-ask-guard

Restart dsh web. The plugin is a dsh.bundle package, so its patch row is added to the profile composition automatically on reconcile.

Install from a git checkout instead:

dsh plugin --profile web add github:Q1hangL/dsh-ask-guard

Config

| Field | Default | Meaning | |---|---|---| | timeoutMs | 300000 | Deadline for one ask_user_question call (ms). |

Tune it in the profile's cordis.patch.yml:

- id: ask-guard
  config:
    timeoutMs: 600000

Recovery note

A page refresh (F5) re-syncs pending questions — the host replays unanswered questions to a reconnecting client. With this plugin, even without a refresh the turn no longer hangs forever.

Test

npm install
node --test

License

MIT

Similar plugins

dsh-question-index

Question index: an ordered, collapsible list of your asked questions floating on the right side of the conversation; click a question to jump the session to that point. Auto-indexes each session's ful

UI & ExperienceManifest valid

0

65/wk

dsh plugin --profile web add @lijinhao315/dsh-question-index

Type normally; about two seconds after you pause, it rewrites your draft into a version more likely to get a good answer, leaving pasted code, links and long text untouched and keeping multi-part ques

Sessions & MessagesManifest valid

0

39/wk

dsh plugin --profile web add dsh-input-rewriter

ChatGPT-style side chat for the DSH Web GUI: ask small questions about the current topic in a floating side panel, answered by an independent lightweight session over the official /api RPC — the main

UI & ExperienceManifest valid

0

dsh plugin --profile web add dsh-quick-ask

Per-session question index for the DSH Web UI: a time-proportional dot rail on the right edge and an expandable chain panel showing every user question with its time, including branch/subagent session

UI & ExperienceManifest valid

0

dsh plugin --profile web add dsh-chat-index

Ask a sidebar assistant about selected assistant text: an ephemeral right-side panel answers from a snapshot of the main conversation's LLM history with streaming Markdown, collapsible thinking and mu

UI & ExperienceManifest valid

0

dsh plugin --profile web add dsh-ask-in-sidebar

Interactive Side-Assistant Dock to ask quick side questions via /btw with real-time thinking status and history pagination without interrupting the active agent loop.

UI & ExperienceManifest valid

0

216/wk

dsh plugin --profile web add @wlv-zedd/dsh-btw-plugin