Skip to content
dsh.fish
Bundle

@iamroven/dsh-web-file-upload

File upload for the DeepSeek Harness web GUI: a folder button, paste, and drag-drop that save files into the session workspace uploads/, with file cards shown alongside image thumbnails.

Source
rrvvvnnn
stars
1 stars
License
MIT
Updated
Updated 14 days ago

Readme

# dsh-web-file-upload

为 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) **Web 界面**提供的文件上传插件。
在聊天框里像图片一样上传任意文件(PDF、文档、代码、压缩包等),文件保存到会话工作区的
uploads 目录,并自动把文件引用带入消息,让 agent 直接读取。

> 官方 Web 界面目前只支持图片粘贴/拖拽(非图片文件会提示"只能粘贴图片")。本插件补上了任意文件的上传。

## 功能

- 输入框内的**文件夹按钮**(位于模型选择器左侧),点击选择文件(支持多选)
- **粘贴文件**:在聊天框里 Ctrl+V(从资源管理器复制的文件)→ 自动上传
- **拖拽文件**:把文件拖进聊天框 → 自动上传
- **文件卡片**:上传的文件以卡片形式显示在输入框内;应用可选补丁后可与图片缩略图同区并列(参考 Coze 风格)
- **图片与文件互斥**:图片和文件不能同时添加,避免布局冲突
- 文件落地到工作区 uploads 目录,agent 可直接读取
- **发送后自动清空**:消息发出后,输入框里的文件卡片自动清空,不残留到下次对话
- **聊天记录文件卡片**:发送的文件在聊天记录中以圆角卡片显示,点击可直接打开文件

## 安装

一条命令搞定(自动下载 + 自动注册,无需手动改配置):

    dsh plugin --profile web add @iamroven/dsh-web-file-upload

然后重启 web 服务(关掉「DSH Web Server」窗口再双击快捷方式),再硬刷新浏览器即可。

> 插件声明了 dsh.bundle.patch,所以 dsh plugin add 会自动把本包追加为 profile 的 bundle 层,
> 无需手动往 cordis.patch.yml 里加行。

> **无需补丁即可使用**:安装后上传、粘贴、拖拽、agent 读取都正常(文件卡片显示在输入框底部)。
> **可选补丁**(见 CORE-PATCH.md)带来更优体验:文件卡片与图片缩略图同区并列、聊天记录里显示可点击的文件卡片。

## 使用

1. 启动 web 界面后,输入框右侧(模型选择器左边)出现文件夹按钮
2. 点击选文件,或直接把文件拖进聊天框 / Ctrl+V 粘贴
3. 文件以卡片出现在输入框内;输入框会附带一行 附件: 文件名
4. 补上你的问题,发送即可 —— agent 会去 uploads 目录读取文件内容
5. 发送后输入框卡片自动清空;聊天记录里你发出的消息中会显示文件卡片,点击可直接打开文件

## 原理

单包双面(Dual-face)插件:

- 宿主半边(lib/index.js):注册 webServer 路由 POST /dsh-upload/put(接收 base64 文件载荷,写入会话工作区的 uploads 目录),以及 GET /dsh-upload/file(按文件名返回文件内容,供聊天记录卡片点击打开)。
- 客户端半边(lib/client.js):cordis 客户端插件,在输入框插槽注册文件夹按钮与文件卡片,监听 document 级 paste/drag 事件,通过 fetch 调宿主路由上传。

## 目录结构

- package.json
- LICENSE
- README.md
- CORE-PATCH.md
- lib/index.js   宿主半边(服务端路由)
- lib/client.js  客户端半边(浏览器 bundle)

## License

MIT

Install

dsh plugin --profile web add github:rrvvvnnn/dsh-web-file-upload

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source