Preface

In the DSH Web client, when collaborating with Agents, it is often necessary to hand over local files to them for processing. The two common approaches are both troublesome: either modifying the official DSH source code to add an upload entry to the input area, requiring re-maintenance after every upgrade; or manually moving files into the Agent workspace in the terminal, which is cumbersome and prone to errors.

The dsh-multimedia-webui-input introduced below takes a different approach: it does not modify the official DSH source tree but directly adds file/folder selection and drag-and-drop upload to the WebUI input area. When sending, the selected resources are copied into the current Agent workspace, allowing the Agent to read and edit them using ordinary workspace tools. This article proceeds by function, installation, and precautions.

What is it

In one sentence, the positioning of dsh-multimedia-webui-input is: cross-platform DSH WebUI multimedia input and workspace attachments (Workspace Attachments). The maintainer is LCYLYM, using the MIT license, and categorized as a client.

First, let’s talk about identity: It is not a plugin for the official DSH repository, but an independent community dual-face plugin (Cordis + dsh.client profile bundle), installed via the native DSH profile plugin command. The public NPM package name is dsh-multimedia-webui-input, and the GitHub repository is LCYLYM/dsh-attachments.

Core Features

File, Folder Selection, and Drag-and-Drop Upload

The first layer of capability is in the input area. The plugin adds file/folder selection and drag-and-drop upload to the DSH Web client’s input area without modifying the official DSH source tree throughout. In implementation, it does not hook or patch the chat DOM; the integration uses the official Cordis/Web surfaces, details of which follow.

Workspace Attachments: Writing to the Workspace Only on Send

The second layer is how files get into the Agent’s hands. The plugin uploads only when the user sends: the Host parses the workspace of the active session and streams the selected resources into the following directory, then DSH’s asynchronous reference serializer prepends the generated absolute path to the model message:

.dsh/tmp/attachments/<session>/<send>/

The Agent side does not need any adaptation for this plugin; it can read, edit, and verify these files using ordinary workspace tools. If preparation fails, DSH will preserve the draft and attachment chips.

Check and Clean in Settings Panel

After files are written to the workspace, management tools are needed. The plugin’s settings panel has an on-demand “Multimedia input & file management” section that can check and clean two scopes:

  1. Active session;
  2. All sessions within the active workspace.

Cleanup operations require confirmation and only delete committed directories bearing the ownership marker of this plugin. They do not cross workspaces and do not delete unknown content.

Installation and Enablement

Installation is done via the native DSH profile plugin command. First, start the official DSH Web UI:

npx --yes @deepseek-ai/dsh web

Then, in another terminal, add the plugin to the web profile:

npx --yes @deepseek-ai/dsh plugin --profile web add dsh-multimedia-webui-input

After changing the profile, the Web UI needs to be restarted. Uninstalling is also a single command:

npx --yes @deepseek-ai/dsh plugin --profile web remove dsh-multimedia-webui-input

Regarding versions, the plugin targets the current @deepseek-ai/dsh NPM runtime (version 0.1.0-rc.6 at the time of README publication), with engines requiring node ^22.19.0 || >=24.0.0. Please confirm your local environment before installation.

Fallback and Local Installer When Registry is Unavailable

When the registry mirror is unavailable, you can use the GitHub fallback installation to use the public repository directly as the installation source:

npx --yes @deepseek-ai/dsh plugin --profile web add github:LCYLYM/dsh-attachments

The repository also retains a local installer, but it is only used for source code QA and old-version fingerprinted DSH checkouts; it is not needed for the public NPM path:

./install.sh

The corresponding uninstall command is:

node scripts/install.mjs uninstall

This installer performs a rollback on failure.

A Few Points from an Implementation Perspective

Before installation, you can understand three implementation details:

  1. Dual-face declaration. The plugin declares both the official dsh.bundle and dsh.client faces simultaneously, with no production dependencies; the deprecated dsh.plugin.json manifest is intentionally no longer used as a second public contract.
  2. Integration via Official Surfaces. The plugin does not hook or patch the chat DOM; integration uses official Cordis/Web surfaces: conversation.input.left, conversation.input.overlay, conversation.input.dock, asynchronous reference serialization, settings.section, and a same-origin Host HTTP route.
  3. Cross-platform. File processing only uses Node’s file system capabilities.

Applicable Scenarios and Notes

Suitable for users who use the DSH Web client as their main working interface and need to frequently provide files or entire folders to Agents, as well as scenarios where users do not want to modify the official DSH source tree.

Notes before use:

  1. The plugin runs with the permissions of the current DSH process. Before installing third-party plugins, it is recommended to read the repository source code and confirm the license (this project is MIT).
  2. Uploads only occur when the user sends; files are not written to the workspace during the draft phase.
  3. The cleanup function only deletes committed directories bearing the ownership marker of this plugin and does not cross workspaces; pay attention to the scope in the confirmation dialog before executing.

Summary

After the steps above, the Web client input area gains file/folder selection and drag-and-drop entries; when sending, files automatically enter the workspace of the active session, and the Agent can read and write them using ordinary workspace tools. The settings panel also retains entries for checking and cleaning. For users who want to supplement file input for the DSH Web client without touching the official source code, this is a community plugin that can be directly installed into the web profile.

  • Plugin Directory Page (Community Listed): https://www.skillhub.cn/plugins/LCYLYM/dsh-attachments
  • GitHub Repository: https://github.com/LCYLYM/dsh-attachments