dsh-task-decision: Collect pending questions from each AI turn into the right sidebar.

Introduction

In DSH (DeepSeek Harness), a common scenario during multi-round development is: AI throws three or five decision points in one go, scattered throughout the body text. Replying one by one is easy to miss or get the question number wrong; by the time you send the answers back, AI often can’t match “what q1 actually asked.” The solution of using inline HTML comments is also not ideal—DSH’s chat renderer escapes HTML comments as-is, resulting in a large block of JSON appearing in the chat stream.

The long-yin-zi/dsh-task-decision introduced in this article is a DSH desktop plugin designed for this problem: at the end of each round, AI automatically registers “current round summary + pending questions” into a tab on the right sidebar. You select all answers and write notes for each question in the panel, click submit, and the answers, carrying the question titles, are automatically sent back to the current session.

What is this

One-sentence positioning: A DSH client plugin that moves the “human-in-the-loop decision” phase from the body text to the right sidebar and ensures transmitted content is structured.

  • Maintainer: Long-Yin-Zi (GitHub organization)
  • Category: Client-side Plugin
  • License: MIT
  • Version: 0.8.6 (latest version listed in README as of writing)
  • Target Host: Verified on DSH 0.2.1-rc.2 (nightly) desktop

The three core pain points solved are: scattered decision points in the text are easy to miss; lack of question numbers and option IDs in transmitted content prevents AI from matching the questions; the state of “previous round not decided, new round arrived” is easily lost between rounds.

Core Features

The following introduces the capabilities listed in the README one by one.

Independent Right Sidebar Panel. The current round summary and all pending questions are concentrated in one tab (“Current Round Work & Pending Decisions”); only one card line appears in the chat stream: 📋 There are pending items for this round, see right panel.

Single Choice / Multiple Choice. Rendered by question type, checkboxes distinguish styles: circles for single choice, squares for multiple choice.

Per-question Permanent Note Box. If you aren’t satisfied with any options, you can choose not to select any and just write your thoughts in the note box; submission still works.

Pre-submission Validation. Questions with neither options selected nor notes written will be marked red and blocked to avoid missed answers.

Back-transmission with Question Titles. Content sent back to the session after submission looks like q1 (Question Title): Selected b "..." ; Whole question note: .... AI can match the question number and option ID. If the user rejects all options, the format is No selection; Whole question note: ....

Auto-collapse Sidebar after Submission. Returns attention to the AI’s reply.

Read-only Replay after Submission. Submitted rounds list exactly what was selected, notes, and overall additions. The panel can be reopened without submitting again; no need to scroll through chat history.

Attachments per Question. Ctrl+V paste in the card or click “Add Attachment” to select. Images are sent inline; other files use DSH’s built-in upload service. Submitted content groups attachments by question, following the text of the question.

Cancel Whole Round. Bottom bar “Submit Decision” takes 2/3 width, “Cancel Round” takes 1/3 width. After clicking confirm twice, the entire batch of questions is crossed out, the panel changes to “Cancelled” and the sidebar automatically collapses; AI automatically restores when it registers new questions in the next round.

Fixed Final Question: “Dig deeper or start working directly”. Every round appends a mandatory single-choice question at the end: Select “Continue discussion” to request AI to explain the logic, details, impact, and logical closure before acting; Select “No discussion” to execute directly. Empty rounds (0 questions) do not render this question and cannot submit empty decisions.

Voice Input for Whole Question Notes. Click “Voice Input” below the note box, stop after speaking, and it auto-transcribes and appends to the note. Requires camera/mic permissions and the host has enabled the voice plugin.

Anti-duplicate Submission & Failure Retry. A sync lock adds a “round already submitted” double-gate; clicking repeatedly or closing and reopening won’t resend; failed sends retain filled content for one-click retry.

Bilingual (Chinese/English). Copywriting uses the locale table (locale/zh.json, locale/en.json), following the DSH interface language.

Installation & Enablement

Prerequisite: DeepSeek Harness (dsh) is installed. This plugin is not published to npm and must be installed from GitHub source code.

# Replace the profile name with your own (desktop is usually desktop)
dsh plugin --profile desktop add github:Long-Yin-Zi/dsh-task-decision

After installation, DSH needs to be restarted because the host side (index.js) loads tools and prompts at startup; client-side changes take effect after refreshing the page.

Two points easily misunderstood, specifically explained in the README:

  • dsh.client.platform = "web" in package.json is a hard validation by the DSH client loader (only accepts string "web"), which desktop also satisfies; it does not mean the plugin “only supports the web”.
  • The plugin has only been verified on the desktop version of DSH. dsh web deployed separately in the browser has not been tested and its usability is unknown.

No extra configuration is needed after enabling. At the end of each round, AI calls the gate_ask tool to register the summary and questions, and the client side automatically pops up the panel.

Typical Usage

  1. Normal conversation; at the end of each round, AI calls gate_ask to register summary and questions.
  2. A card line appears in the chat stream, and the “Current Round Work & Pending Decisions” tab opens on the right automatically.
  3. Select questions one by one; if none of the options are suitable, directly write thoughts in that question’s note box without selecting.
  4. When screenshots or documents are needed, Ctrl+V paste in that question’s note box, or click “Add Attachment” to select.
  5. Click “Submit Decision,” the answer is automatically sent back to the current session, and the panel automatically collapses.
  6. After the panel is closed, click the “Decision” button on the right side of the session header to reopen; submitted rounds will not be submitted again.
  7. If this round doesn’t need processing: click “Cancel Round” next to “Submit Decision,” then click “Confirm Cancel,” the entire round is crossed out, and the sidebar collapses.
  8. The last question is fixed as “Continue digging or start directly”: Select the first item, AI explains the logic, impact, risks, etc., for your confirmation; select the second item to execute directly based on previous choices.

Back-transmission format example (as is in README):

【拍板回传】
q1(学生全流程收尾做哪些): 选 b「…」、c「…」;整题备注:优先做风险低的
q2(推进节奏): 选 a「做完一项再汇报」
(整体补充:……)

How it works, the chain provided by README is as follows:

模型每轮结束前调用工具 gate_ask({ summary, questions })
        ↓
聊天流里只显示一行卡片,右侧自动打开 tab
        ↓
页头探针从 tool-result 的 argsRaw 解析出 gate,写入模块 store
        ↓
用户选选项 / 写备注 → 点「提交拍板」
        ↓
ctx.sessions.scope(sessionId).conversation.send("【拍板回传】…")
        ↓
面板自动收起,AI 继续干活

Implementation is divided into host side and browser side: index.js registers the gate_ask tool and injects system prompt rules, client.js handles parsing, header probe, right sidebar tab, panel UI, and submission back-transmission. Early v0.1 used inline HTML comments, changed to tool calls due to rendering escape issues, and the residual inline comment parsing path is retained for compatibility.

Scenarios & Notes

Who is it for: People doing multi-round, approval-in-the-loop development on the DSH desktop. In these sessions, there are many decision points per round that need confirmation item by item and notes; replying in the body text is messy, so the benefits of a panel-based approach are direct.

Notes:

  • Read source code and license (MIT) before installing to confirm that the system prompt rules injected by index.js and the parameter structure of the gate_ask tool match your expectations. The plugin runs with the current dsh process permissions.
  • The plugin does not initiate network requests or actively read/write files; only files you paste or select are saved by DSH’s built-in fileUpload service, and transmission goes back to the current session via DSH’s own sending channel.
  • Platform support Windows / macOS / Linux (pure JS, no native dependencies, react provided by host).
  • Known boundaries: Drag-and-drop attachments are not available (DSH intercepts drag events during the document bubble phase), only Ctrl+V paste or “Add Attachment” works; collapsing the sidebar relies on internal interface sidebarRight.actionsFor(...).setExpanded(...). If DSH updates and renames it, it will degrade to “not auto-collapsing,” which does not affect submission.

Conclusion

The value of dsh-task-decision lies in extracting the “decision” phase from the body text and using structured back-transmission to reduce the probability of missed answers and wrong questions. Its intrusion into existing workflows is small: install and restart, then just click and select in the right panel for each round.

  • Directory: https://www.skillhub.cn/plugins/Long-Yin-Zi/dsh-task-decision
  • GitHub: https://github.com/Long-Yin-Zi/dsh-task-decision
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye