dsh-plugin-question-attachments
中文 | English
Attach images and files while answering an ask_user_question card in DeepSeek Harness.
Status: alpha / minimal viable build. Tested against DSH
0.2.2-rc.1(Desktop, Windows).
The problem
ask_user_question takes over the composer position with an answer card, and the answer payload is text only:
{ selected: string[], custom?: string }
Attachments in DSH are prompt credentials — they are stored by ctx.fileUpload and consumed when a user message is admitted. A tool answer has no channel for them, so while the card is up there is no way to drop a screenshot into the answer.
What this plugin does
While the current Session has a pending interaction (the question card owns the composer):
- a small 📎 button appears at the right end of the answer row, inside the card;
- click it, paste (
Ctrl+V), or drop a file onto it; - the file is uploaded with
ctx.fileUpload.uploadImage()/upload(), producing a receipt; - the receipt is sent to the agent as a steering prompt:
session.prompt([{ type: 'file', receiptId }, { type: 'text', text }], 'steer'); - each sent file appears as a card above the answer row (thumbnail, name, type — last three, then
+N).
During a blocking question the Session is still running, so the steer is accepted by the Inbox and queued. The host admits queued steers only after the current tool wait ends — i.e. the model sees the answer and the attachment at the same step boundary.
No protocol change, no patched installation, fully removable.
Install
The plugin is a normal DSH bundle package with a web client half.
From the DSH UI (easiest)
Sidebar → Plugins → Add plugin, paste the repository URL:
https://github.com/rxdage/dsh-plugin-question-attachments
then Install → Enable now → restart DeepSeek Harness. The dialog also accepts
github:rxdage/dsh-plugin-question-attachments, a tarball URL, or a local absolute path.
From the CLI
dsh plugin --profile desktop add github:rxdage/dsh-plugin-question-attachments
Manual (link a checkout)
git clone https://github.com/rxdage/dsh-plugin-question-attachments "$env:LOCALAPPDATA\dsh-plugin-question-attachments"
$profile = "$env:USERPROFILE\.dsh\profiles\desktop"
New-Item -ItemType Junction -Path "$profile\node_modules\dsh-plugin-question-attachments" `
-Target "$env:LOCALAPPDATA\dsh-plugin-question-attachments"
Then add it to profiles/desktop/package.json:
{
"dependencies": {
"dsh-plugin-question-attachments": "link:C:/Users/<you>/AppData/Local/dsh-plugin-question-attachments"
},
"dsh": { "profile": { "bundles": [ /* ..., */ "dsh-plugin-question-attachments" ] } }
}
and restart DeepSeek Harness. To uninstall, remove the junction and those two entries (or use Plugins → the package → Uninstall).
Usage
Ask the agent something that triggers an ask_user_question, and while the card is shown:
- click the 📎 button at the right end of the answer row, or
- paste a screenshot from the clipboard, or
- drag a file onto the button.
The chip reports upload progress and failures in place. The attachment arrives as a queued user message; answer the question and the agent receives both in its next step.
Limits
- Only visible while a question/approval card is pending. Once the card is hidden,
pendingInteractionclears and the chip disappears. - Steering during a blocked tool call is queued, not delivered immediately — by design.
- One message per file; no drag-and-drop reordering or previews yet.
- The desktop profile is the only profile wired up in the example; any profile with the
fileUpload+sessionsclient services works.
Compatibility
Built and verified against DSH 0.2.2-rc.1. It only uses documented client services (slots, sessions, uiSession, fileUpload, session.prompt) and no private APIs, so it should survive minor releases — but the client bundle format is pre-1.0, so check the CHANGELOG after upgrades.
License
MIT
No comments yet. Be the first to write one.