dsh-web-ui
zhu1090093659
Plugin and skin collection for DeepSeek Harness (DSH) Web UI - task board, git graph, right-side panel, remote mobile UI, pet, live token stats, and skin center.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:a903067276-rgb/dsh-file-upload
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
One upload button + drag-and-drop files straight into the conversation — a DeepSeek Harness (DSH) web plugin.
Click the 📎 upload button next to the composer (or just drag any file into the window):
the file is saved to the current project's uploads/ directory and the absolute path is
inserted into the input box as [上传文件] /path/to/uploads/xxx.png. Press send and the
model — or any attached vision tool — reads the file by path.
Vision-plugin agnostic: the message only carries a local absolute path (plain text), so
it works with dsh-vision's view_image, any other model/tool that can read local paths, or
no vision at all. It bypasses DSH's native "the current model does not support images"
rejection because no image block is ever submitted.

The 📎 upload button in the composer tool row; the picked file's path (blurred in the screenshot) is inserted into the input box automatically, ready to send.
| Action | Effect |
|---|---|
| Click 📎 upload | System file picker (multi-select) → save → path into the input box |
| Drag a file into the window | Images & any file type are taken over (no "unsupported" toast) → save → path into the input box |
| Send the message | The model / vision tool reads the file by absolute path |
| Switch sessions | Button follows the current session; files land in that session's project uploads/ |
dsh plugin --profile web add "github:a903067276-rgb/dsh-file-upload#main"
Restart dsh web (or use scripts/restart-dsh-web.sh). Requires pnpm on PATH
(dsh plugin forwards to pnpm).
See docs/install.md: symlink into ~/.dsh/profiles/web/node_modules/
plus a single entry in ~/.dsh/cordis.patch.yml, then restart.
[上传文件] <absolute path> lines (your existing draft text is kept).| Platform | Status |
|---|---|
| macOS | ✅ fully tested (development environment) |
| Linux | ✅ expected to work (pure Node implementation), untested |
| Windows | ⚠️ expected to work (pure Node implementation, Windows-safe filename sanitization, platform separator paths), untested |
dsh web)node:fs), no system commands
required on any platform.lib/index.js): one route POST /api/file-upload/save — validates the session
and size, then writes the base64 payload to <session cwd>/uploads/ with pure Node
(node:fs, no system command dependency, cross-platform); the returned path is built via
node:path and follows the platform separator.lib/client.js): registers the 📎 upload button in the
conversation.input.left seat (visually distinct from the default "+" command button);
a capture-phase document listener takes over file drags before the official InputBar's
bubble-phase listener (which would reject images); FileReader reads base64, uploads it,
then the path text is appended to the input draft (inputActions.setDraft).uploads/ directory only grows; it is never cleaned automatically (we don't delete
your files) — remove files manually when needed.scripts/restart-dsh-web.sh restarts dsh web gracefully (kills the port listener, waits,
relaunches, health-checks); the browser auto-reconnects, no manual refresh needed.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: file-upload、web-ui。