DeepSeek Harness Plugin

WJZ-P/dsh-attachments

Stars ★ 5 Downloads (30d) 556 Category UI Enhancements Added 2026-08-19 npm dsh-attachment

Adds file and folder drag-and-drop attachments to the Web UI, with composer cards, persistent history, and workspace-backed paths.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-attachment

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:WJZ-P/dsh-attachments

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

dsh-attachment

Drag-and-drop file and folder attachments for DeepSeek Harness.

简体中文 · English

CI


dsh-attachment adds file and folder attachments to the DeepSeek Harness Web UI. Images continue through Harness's native image pipeline; the plugin handles generic files and complete directory trees.

Features

  • Drop ordinary files, images, or folders from the operating system.
  • Keep native PNG/JPEG/WebP/GIF preview, history gallery, and model-capability checks.
  • Represent one dropped folder as one attachment card while preserving its directory tree.
  • Copy committed files and folders into .deepseek-harness/attachments/ in the active workspace before the model step.
  • Render attachment cards in both the composer and persistent message history.
  • Stream upload and download bytes without adding plugin-defined file-count or per-file-size limits.
  • Leave the original composer layout unchanged while no plugin-owned attachment is present.

Screenshots

Drag-and-drop surface

The plugin adds its window-level dashed drop boundary while preserving Harness's native image-intake surface.

Drag-and-drop attachment surface

Image conversation history

Native image messages continue to render in persistent conversation history and remain available to multimodal models.

Image message and model response

Multiple image previews

Multiple native image previews share the composer attachment rail used by plugin-provided file and folder cards.

Multiple image previews in one prompt

Install

Install the prebuilt package from npm into a native DSH web profile:

dsh plugin --profile web add dsh-attachment

Build and install a local checkout:

pnpm install
pnpm run build
dsh plugin --profile web add .

Inspect the composed profile and start DSH:

dsh --profile web --dump-config
dsh --profile web

Remove the plugin:

dsh plugin --profile web remove dsh-attachment

DSH package contract

This package follows the installable DSH bundle format:

  • dsh.bundle.patch points to cordis.patch.yml, which inserts the Host plugin row.
  • dsh.client.platform is web, and exports["./client"] exposes the prebuilt browser bundle.
  • Official @deepseek-ai/* compatibility packages are declared as peer dependencies.
  • The npm tarball contains prebuilt lib/ artifacts, so registry installs do not need to build the browser bundle.

The Host half owns byte transport, durable metadata, and workspace materialization. The browser half contributes composer and history UI through Harness extension slots. The package has no Tauri runtime dependency.

Compatibility

The current release targets the interfaces in DeepSeek Harness 0.1.0-rc.5: standard bundle loading, web client discovery, conversation input/history slots, session events, and Host route registration.

Development

pnpm install
pnpm run build
pnpm test
npm pack --dry-run

The ready-to-copy catalog YAML and screenshot URL template are maintained in MARKETPLACE.md. README image assets belong in assets/markdown/.

Security and portability

  • Filenames, MIME types, attachment IDs, and directory member paths are treated as untrusted input.
  • Drive-prefixed, UNC, absolute, and traversal paths are rejected before workspace materialization.
  • GitHub CI exercises both Linux and Windows path semantics.
  • See SECURITY.md for supported versions and private-reporting guidance.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.