In development or debugging scenarios for DeepSeek Harness (DSH), it is often necessary to bring local files, code snippets, or complete project directories into the conversational context. Conventional approaches often require manually copying files into the workspace, pasting paths, or performing tedious file-management operations. dsh-postman aims to solve this pain point by allowing users to directly “mail” files and folders into the conversation without extra file-system operations.
This is a Web client plugin for DeepSeek Harness, maintained by zhousun55-byte. It provides a file-upload pipeline that supports rendering images as message blocks, writing text content into the input box as inline code blocks, and persisting folders by their directory structure.
Core Features¶
- File and Image Processing: Supports multi-selection upload. Images (PNG/JPG/WebP/GIF, size ≤5 MiB) are handled through the native DSH attachment pipeline, displayed as message blocks, and automatically transcribed on the model side by a visual bridge (such as modlens). Unsupported or oversized images, such as HEIC, automatically fall back to path upload. The contents of text files are written directly into the input-box draft as inline code blocks, making them immediately visible to the model.
- Folder Processing: Uses Chrome’s
webkitdirectoryattribute to support whole-directory upload. Files are persisted according to the directory structure at~/.dsh/uploads/<timestamp>-<folder-name>/.... Images inside the folder (up to 12) are also added to the message as images. Binary files have their path and size injected, and the model can read them using thereadtool. - Zero Dependencies: The plugin uses only built-in Node modules + the native DSH pipeline, requires no build steps, and can be used immediately after cloning.
Installation and Enablement¶
Add this repository as a dependency in the Web profile and declare a plugin line; dsh will provide the browser-side endpoint under /plugins/dsh-postman/client.js by package name. The steps are as follows:
- Add the dependency in
~/.dsh/profiles/web/package.json:
"dsh-postman": "link:/path/to/dsh-postman"
(After publishing, you can use a version-number dependency instead)
- Add the plugin line in
~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: ui-upload
name: 'dsh-postman'
- Run the installation and restart the client:
pnpm --dir ~/.dsh/profiles/web install
# 重启 dsh web(客户端改动仅需刷新页面)
Typical Usage¶
Use /upload in the + command menu to the left of the input-box toolbar; this command provides two options: upload file / upload folder. The toolbar itself does not take up extra buttons.
- Upload File: After selecting local files, the contents of text files are written directly into the input-box draft, making them immediately visible to the model; images appear in the conversation as message blocks.
- Upload Folder: After selecting a folder, the system persists the files by directory structure and injects a file inventory and text-file content previews into the draft (capped at approximately 24,000 characters in total).
Notes¶
- Format and Size Limits: The maximum size per file is 25 MiB. Images support only PNG/JPG/WebP/GIF (≤5 MiB); unsupported formats such as HEIC, or images exceeding the limit, automatically fall back to path upload.
- Folder Image Limit: Images inside a folder are limited to 12.
- Permissions and Security: Directory permissions are
0700, and file permissions are0600. The plugin runs with the currentdshprocess permissions, and cross-origin requests are rejected. - Filename Conflicts: If a filename conflicts during persistence, a
-2/-3suffix is added automatically; files are never overwritten.
Conclusion¶
By using the native pipeline and a zero-dependency design, dsh-postman simplifies the file-interaction workflow in DSH environments. If you need to frequently bring code or documents into a session, you can directly use the /upload command without copying and pasting file paths.