# dsh-drop-any-file > Extend the DeepSeek Harness (DSH) Web UI chat's drag-and-drop so that every file type is accepted: dropping a non-image file saves it into the active session's workspace for the agent to read and use. 让 DSH 聊天支持拖拽任意类型文件:非图片文件将保存到当前会话工作区,供 Agent 读取使用。 For the complete combined document, see [llms-full.txt](llms-full.txt). For human-readable docs, see [README.md](README.md) (English) and [README.zh.md](README.zh.md) (中文). ## Key facts - [Repository](https://github.com/Zenjibad/dsh-drop-any-file): public GitHub repo, MIT license, `dsh-plugin` topic. - [Install](README.md#-quick-start): packaged profile plugin — `dsh plugin --profile web add ` (local dir, `github:Zenjibad/dsh-drop-any-file`, or `git+https://github.com/Zenjibad/dsh-drop-any-file.git`), then restart DSH **and hard-refresh the browser tab**. `dsh.bundle` (`cordis.patch.yml`) mounts the host half; `dsh.client` + `exports["./client"]` register the browser half. Survives restarts, no cordis_define. - [Save path](README.md#️-how-it-works): client intercepts non-image drops (capture-phase `window` listeners from the `conversation.input.dock` seat), POSTs `{ sessionId, fileName, base64 }` to `/drop-any-file/api`; host resolves `sessions.get(sessionId).header.cwd` and writes the sanitised basename there. - [UI seats](README.md#-features): no permanent seat — `conversation.input.dock` id `drop-any-file` is only the session-scoped mount point for the global drop listeners; a themed overlay + toast appear during/after drops. Image-only drops keep the built-in inline-attach behaviour. - [Limits](README.md#️-configuration): 80 MB base64 body / 60 MB file caps; file names are basename-only with illegal path characters stripped. - [Failure mode](README.md#-faq): no session open → plugin inert; oversized file → host `413` + failure toast; route always returns `{ok:false,error}` JSON, never a non-JSON 500. ## Documentation - [README.md (English)](README.md): features, architecture, quick start, config, FAQ, security notes. - [README.zh.md (中文)](README.zh.md): same content in Chinese. - [src/index.ts](src/index.ts): host half — body read, session-cwd resolve, name sanitisation, `writeFile`, `/drop-any-file/api` route. - [src/client/index.tsx](src/client/index.tsx): client bundle — capture-phase drop listeners, overlay, toast, POST to the host route. - [AGENTS.md](AGENTS.md): repository guide for AI agents (layout, key behaviors, probed environment facts, testing). - [package.json](package.json): npm metadata with `dsh.bundle` + `dsh.client` manifests for `dsh plugin add`. ## Source layout - [src/index.ts](src/index.ts): the host half — a real Node module (packaged hosts are NOT sandboxed like dynamic plugins): `node:fs` `writeFile` + `node:path` sanitisation, `webServer` JSON route `GET|POST /drop-any-file/api`. - [src/client/index.tsx](src/client/index.tsx): the client bundle — `conversation.input.dock` registration, capture-phase `dragenter`/`dragover`/`dragleave`/`drop` listeners on `window`, `FileReader` → base64 → `fetch` POST, `